fix:增加视频旋转角度,调整监控时获取锁peerId的逻辑

This commit is contained in:
liyi 2025-04-28 11:47:26 +08:00
parent 84431d17c4
commit 419912c590
7 changed files with 91 additions and 58 deletions

View File

@ -743,43 +743,40 @@ class LockDetailLogic extends BaseGetXController {
eventBus.fire(RefreshLockDetailInfoDataEvent());
}
///
void requestDeviceNetworkInfo() async {
final DeviceNetwork deviceNetworkInfo =
await ApiRepository.to.getDeviceNetwork(
deviceType: 2,
deviceMac: state.keyInfos.value.mac!,
);
if (deviceNetworkInfo.data?.wifiName == null ||
deviceNetworkInfo.data?.wifiName == '') {
return;
} else {
final peerId = deviceNetworkInfo?.data?.peerId;
if (peerId == null || peerId.isEmpty || peerId == '') {
throw Exception('设备peerId为空');
}
// peerID
StartChartManage().lockNetworkInfo =
deviceNetworkInfo.data ?? DeviceNetworkInfo();
StartChartManage().lockPeerId = peerId;
}
}
// ///
// void requestDeviceNetworkInfo() async {
// final DeviceNetwork deviceNetworkInfo =
// await ApiRepository.to.getDeviceNetwork(
// deviceType: 2,
// deviceMac: state.keyInfos.value.mac!,
// );
// if (deviceNetworkInfo.data?.peerId == null ||
// deviceNetworkInfo.data?.peerId == '') {
// return;
// }
// final peerId = deviceNetworkInfo!.data!.peerId;
// // peerID
// StartChartManage().lockNetworkInfo =
// deviceNetworkInfo.data ?? DeviceNetworkInfo();
// StartChartManage().lockPeerId = peerId!;
// }
///
void sendMonitorMessage() {
final catEyeConfig = state.keyInfos.value.lockSetting?.catEyeConfig ?? [];
final network = state.keyInfos.value.network;
if (catEyeConfig.isNotEmpty &&
catEyeConfig.length > 0 &&
catEyeConfig[0].catEyeMode != 0) {
if ((StartChartManage().lockNetworkInfo.wifiName == null ||
StartChartManage().lockNetworkInfo.wifiName == '') ) {
if (network == null || network?.peerId == null || network?.peerId == '') {
showToast('设备未配网'.tr);
return;
}
//
PacketLossStatistics().reset();
// id
StartChartManage().startCallRequestMessageTimer(
ToPeerId: StartChartManage().lockNetworkInfo.peerId ?? '');
StartChartManage()
.startCallRequestMessageTimer(ToPeerId: network!.peerId ?? '');
} else {
showToast('猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式'.tr);
}
@ -791,7 +788,7 @@ class LockDetailLogic extends BaseGetXController {
getServerDatetime();
await PermissionDialog.request(Permission.location);
await PermissionDialog.requestBluetooth();
requestDeviceNetworkInfo();
// requestDeviceNetworkInfo();
}
@override
@ -844,11 +841,11 @@ class LockDetailLogic extends BaseGetXController {
}
});
state.SuccessfulDistributionNetworkEvent = eventBus
.on<SuccessfulDistributionNetwork>()
.listen((SuccessfulDistributionNetwork event) {
//
requestDeviceNetworkInfo();
});
// state.SuccessfulDistributionNetworkEvent = eventBus
// .on<SuccessfulDistributionNetwork>()
// .listen((SuccessfulDistributionNetwork event) {
// //
// requestDeviceNetworkInfo();
// });
}
}

View File

@ -4,6 +4,7 @@ import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/starChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/starChart/constant/talk_status.dart';
import 'package:star_lock/talk/starChart/entity/scp_message.dart';
@ -42,6 +43,7 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle
startChartManage.stopCallRequestMessageTimer();
// talkViewState.rotateAngle.value = talkExpectResp.rotate ?? 0;
startChartManage.rotateAngle = talkExpectResp.rotate;
AppLog.log('视频画面需要旋转:${talkExpectResp.rotate}');
//
// x秒内没有收到通话保持则执行的操作;
talkePingOverTimeTimerManager.start();

View File

@ -180,15 +180,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
if (isH264) {
// H264H264视频和G711音频期望
startChartManage.sendOnlyH264VideoTalkExpectData();
print('锁支持H264发送H264视频格式期望数据');
print('app收到的对讲请求后发送的预期数据=========锁支持H264发送H264视频格式期望数据');
} else if (isMJpeg) {
// MJPEGG711音频期望
startChartManage.sendOnlyImageVideoTalkExpectData();
print('锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
print('app收到的对讲请求后发送的预期数据=========锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
} else {
// 使
startChartManage.sendOnlyImageVideoTalkExpectData();
print('锁不支持H264和MJPEG默认发送图像视频格式期望数据');
print('app收到的对讲请求后发送的预期数据=========锁不支持H264和MJPEG默认发送图像视频格式期望数据');
}
}
@ -203,15 +203,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
if (isH264) {
// H264H264视频和G711音频期望
startChartManage.sendH264VideoAndG711AudioTalkExpectData();
print('锁支持H264发送H264视频格式期望数据');
print('app主动发请求收到回复后发送的预期数据=======锁支持H264发送H264视频格式期望数据');
} else if (isMJpeg) {
// MJPEGG711音频期望
startChartManage.sendImageVideoAndG711AudioTalkExpectData();
print('锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
print('app主动发请求收到回复后发送的预期数据=======锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
} else {
// 使
startChartManage.sendImageVideoAndG711AudioTalkExpectData();
print('锁不支持H264和MJPEG默认发送图像视频格式期望数据');
print('app主动发请求收到回复后发送的预期数据=======锁不支持H264和MJPEG默认发送图像视频格式期望数据');
}
}
}

View File

@ -45,6 +45,7 @@ import 'package:star_lock/talk/starChart/proto/talk_expect.pb.dart';
import 'package:star_lock/talk/starChart/proto/talk_expect.pbserver.dart';
import 'package:star_lock/talk/starChart/status/star_chart_talk_status.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/deviceInfo_utils.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:uuid/uuid.dart';
@ -407,17 +408,36 @@ class StartChartManage {
///
void startCallRequestMessageTimer({required String ToPeerId}) async {
//
if (talkStatus.status != TalkStatus.proactivelyCallWaitingAnswer) {
// h264则跳转至webview
if (_defaultTalkExpect.videoType.contains(VideoTypeE.H264)) {
Get.toNamed(
Routers.h264WebView,
);
} else {
Get.toNamed(
Routers.starChartTalkView,
);
}
// if (talkStatus.status != TalkStatus.proactivelyCallWaitingAnswer) {
// // h264则跳转至webview
// if (_defaultTalkExpect.videoType.contains(VideoTypeE.H264)) {
// Get.toNamed(
// Routers.h264WebView,
// );
// } else {
// Get.toNamed(
// Routers.starChartTalkView,
// );
// }
// }
final LockListInfoItemEntity currentKeyInfo =
CommonDataManage().currentKeyInfo;
final isH264 = currentKeyInfo.lockFeature?.isH264 == 1;
final isMJpeg = currentKeyInfo.lockFeature?.isMJpeg == 1;
// 使H264MJPEG
if (isH264) {
Get.toNamed(
Routers.h264WebView,
);
} else if (isMJpeg) {
Get.toNamed(
Routers.starChartTalkView,
);
} else {
Get.toNamed(
Routers.starChartTalkView,
);
}
//
talkRequestTimer ??= Timer.periodic(

View File

@ -59,6 +59,9 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
// I帧序号
final Set<int> _decodedIFrames = <int>{};
//
int? _previousFrameTimestamp;
//
Future<void> _initVideoDecoder() async {
try {
@ -227,16 +230,27 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
_playAudioFrames();
break;
case TalkData_ContentTypeE.H264:
//
final currentTimestamp = DateTime.now().millisecondsSinceEpoch;
//
if (_previousFrameTimestamp != null) {
final timeDifference = currentTimestamp - _previousFrameTimestamp!;
AppLog.log('当前帧与上一帧的时间间隔: $timeDifference 毫秒');
}
//
_previousFrameTimestamp = currentTimestamp;
//
// _processH264Frame(talkData, talkDataH264Frame!);
// H264视频帧
_processH264Frame(talkData, talkDataH264Frame!);
//
if (talkDataH264Frame!.frameType == TalkDataH264Frame_FrameTypeE.I) {
AppLog.log(
'帧序号${talkDataH264Frame.frameSeq};帧类型:${talkDataH264Frame.frameType.toString()};时间戳:${DateTime.now().millisecondsSinceEpoch}');
}
// _processH264Frame(talkData, talkDataH264Frame!);
//
// //
// if (talkDataH264Frame!.frameType == TalkDataH264Frame_FrameTypeE.I) {
// AppLog.log(
// '帧序号${talkDataH264Frame.frameSeq};帧类型:${talkDataH264Frame.frameType.toString()};时间戳:${DateTime.now().millisecondsSinceEpoch}');
// }
break;
}
});

View File

@ -134,7 +134,7 @@ class _TalkViewPageState extends State<TalkViewPage>
key: state.globalKey,
child: SizedBox.expand(
child: RotatedBox(
quarterTurns: startChartManage.remotePort ~/ 90,
quarterTurns: startChartManage.rotateAngle ~/ 90,
child: Obx(
() => state.currentImage.value != null
? RawImage(

View File

@ -75,7 +75,7 @@ class _H264WebViewState extends State<H264WebView>
)
: SizedBox.expand(
child: RotatedBox(
quarterTurns: startChartManage.remotePort ~/ 90,
quarterTurns: startChartManage.rotateAngle ~/ 90,
child: WebViewWidget(
controller: state.webViewController,
),