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

This commit is contained in:
liyi 2025-04-28 11:47:26 +08:00
parent 0af232e42c
commit a546989a25
7 changed files with 91 additions and 58 deletions

View File

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

View File

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

View File

@ -180,15 +180,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
if (isH264) { if (isH264) {
// H264H264视频和G711音频期望 // H264H264视频和G711音频期望
startChartManage.sendOnlyH264VideoTalkExpectData(); startChartManage.sendOnlyH264VideoTalkExpectData();
print('锁支持H264发送H264视频格式期望数据'); print('app收到的对讲请求后发送的预期数据=========锁支持H264发送H264视频格式期望数据');
} else if (isMJpeg) { } else if (isMJpeg) {
// MJPEGG711音频期望 // MJPEGG711音频期望
startChartManage.sendOnlyImageVideoTalkExpectData(); startChartManage.sendOnlyImageVideoTalkExpectData();
print('锁不支持H264支持MJPEG发送MJPEG视频格式期望数据'); print('app收到的对讲请求后发送的预期数据=========锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
} else { } else {
// 使 // 使
startChartManage.sendOnlyImageVideoTalkExpectData(); startChartManage.sendOnlyImageVideoTalkExpectData();
print('锁不支持H264和MJPEG默认发送图像视频格式期望数据'); print('app收到的对讲请求后发送的预期数据=========锁不支持H264和MJPEG默认发送图像视频格式期望数据');
} }
} }
@ -203,15 +203,15 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
if (isH264) { if (isH264) {
// H264H264视频和G711音频期望 // H264H264视频和G711音频期望
startChartManage.sendH264VideoAndG711AudioTalkExpectData(); startChartManage.sendH264VideoAndG711AudioTalkExpectData();
print('锁支持H264发送H264视频格式期望数据'); print('app主动发请求收到回复后发送的预期数据=======锁支持H264发送H264视频格式期望数据');
} else if (isMJpeg) { } else if (isMJpeg) {
// MJPEGG711音频期望 // MJPEGG711音频期望
startChartManage.sendImageVideoAndG711AudioTalkExpectData(); startChartManage.sendImageVideoAndG711AudioTalkExpectData();
print('锁不支持H264支持MJPEG发送MJPEG视频格式期望数据'); print('app主动发请求收到回复后发送的预期数据=======锁不支持H264支持MJPEG发送MJPEG视频格式期望数据');
} else { } else {
// 使 // 使
startChartManage.sendImageVideoAndG711AudioTalkExpectData(); 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/proto/talk_expect.pbserver.dart';
import 'package:star_lock/talk/starChart/status/star_chart_talk_status.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/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/deviceInfo_utils.dart'; import 'package:star_lock/tools/deviceInfo_utils.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -407,17 +408,36 @@ class StartChartManage {
/// ///
void startCallRequestMessageTimer({required String ToPeerId}) async { void startCallRequestMessageTimer({required String ToPeerId}) async {
// //
if (talkStatus.status != TalkStatus.proactivelyCallWaitingAnswer) { // if (talkStatus.status != TalkStatus.proactivelyCallWaitingAnswer) {
// h264则跳转至webview // // h264则跳转至webview
if (_defaultTalkExpect.videoType.contains(VideoTypeE.H264)) { // if (_defaultTalkExpect.videoType.contains(VideoTypeE.H264)) {
Get.toNamed( // Get.toNamed(
Routers.h264WebView, // Routers.h264WebView,
); // );
} else { // } else {
Get.toNamed( // Get.toNamed(
Routers.starChartTalkView, // 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( talkRequestTimer ??= Timer.periodic(

View File

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

View File

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

View File

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