diff --git a/lib/appRouters.dart b/lib/appRouters.dart index 495b54c7..6ff7ac91 100755 --- a/lib/appRouters.dart +++ b/lib/appRouters.dart @@ -516,7 +516,7 @@ abstract class Routers { static const String doubleLockLinkPage = '/doubleLockLinkPage'; //双锁联动 static const String starChartPage = '/starChartPage'; //星图 static const String starChartTalkView = '/starChartTalkView'; //星图对讲页面 - static const String h264WebView = '/h264WebView'; //星图对讲页面 + static const String h264View = '/h264View'; //星图对讲页面 static const String imageTransmissionView = '/imageTransmissionView'; //星图对讲页面(图传) static const String permissionGuidancePage = @@ -1192,7 +1192,7 @@ abstract class AppRouters { GetPage( name: Routers.starChartTalkView, page: () => const TalkViewPage()), GetPage( - name: Routers.h264WebView, page: () => TalkViewNativeDecodePage()), + name: Routers.h264View, page: () => TalkViewNativeDecodePage()), // 插件播放页面 GetPage( name: Routers.imageTransmissionView, @@ -1202,6 +1202,6 @@ abstract class AppRouters { name: Routers.permissionGuidancePage, page: () => PermissionGuidancePage()), // 插件播放页面 - // GetPage(name: Routers.h264WebView, page: () => H264WebView()), // webview播放页面 + // GetPage(name: Routers.h264View, page: () => H264WebView()), // webview播放页面 ]; } diff --git a/lib/talk/other/audio_player_manager.dart b/lib/talk/other/audio_player_manager.dart index 2c7c5fb9..d49db782 100644 --- a/lib/talk/other/audio_player_manager.dart +++ b/lib/talk/other/audio_player_manager.dart @@ -16,14 +16,22 @@ class AudioPlayerManager { // 单例的 AudioPlayer 实例 final AudioPlayer _audioPlayer = AudioPlayer(); + // 播放状态,防止重复播放 + bool _isPlaying = false; // 播放铃声 Future playRingtone() async { + if (_isPlaying) { + log(text: 'Ringtone is already playing.'); + return; + } try { await _audioPlayer.setReleaseMode(ReleaseMode.loop); await _audioPlayer.play(AssetSource('ring1.mp3')); + _isPlaying = true; log(text: 'Ringtone started playing.'); } catch (e) { + _isPlaying = false; log(text: 'Error playing ringtone: $e'); } } @@ -31,12 +39,12 @@ class AudioPlayerManager { // 停止播放铃声 Future stopRingtone() async { try { - // 不需要设置 ReleaseMode,在停止时保持默认即可 _audioPlayer.setReleaseMode(ReleaseMode.loop); await _audioPlayer.stop(); - + _isPlaying = false; log(text: 'Ringtone stopped.'); } catch (e) { + _isPlaying = false; log(text: 'Error stopping ringtone: $e'); } } @@ -45,8 +53,10 @@ class AudioPlayerManager { Future pauseRingtone() async { try { await _audioPlayer.pause(); + _isPlaying = false; log(text: 'Ringtone paused.'); } catch (e) { + _isPlaying = false; log(text: 'Error pausing ringtone: $e'); } } @@ -54,8 +64,10 @@ class AudioPlayerManager { Future resumeRingtone() async { try { await _audioPlayer.resume(); + _isPlaying = true; log(text: 'Ringtone resumed.'); } catch (e) { + _isPlaying = false; log(text: 'Error resuming ringtone: $e'); } } diff --git a/lib/talk/starChart/handle/impl/udp_talk_expect_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_expect_handler.dart index d500fd44..c592b454 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_expect_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_expect_handler.dart @@ -41,9 +41,6 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle final TalkExpectResp talkExpectResp = scpMessage.Payload; if (talkExpectResp != null) { - // 播放铃声 - //test:使用自定义铃声 - playRingtone(); // print('收到预期音视频数据回复,scpMessage:$scpMessage'); // 停止发送预期数据的定时器 startChartManage.stopTalkExpectMessageTimer(); @@ -66,6 +63,8 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle talkStatus.setAnsweredSuccessfully(); // 主动呼叫时需要启动ping startChartManage.startTalkPingMessageTimer(); + } else if (talkStatus.status != TalkStatus.answeredSuccessfully) { + playRingtone(); } AppLog.log( '视频画面需要旋转:${talkExpectResp.rotate},画面宽高:${talkExpectResp.width}-${talkExpectResp.height}'); @@ -97,6 +96,7 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle talkExpectResp.width == 640 && talkExpectResp.height == 480)) { Get.toNamed(Routers.imageTransmissionView); + return; } if (startChartManage @@ -104,7 +104,7 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle .videoType .contains(VideoTypeE.H264)) { Get.toNamed( - Routers.h264WebView, + Routers.h264View, ); } else { Get.toNamed( diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index 2d8b4529..7a185c47 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -430,7 +430,7 @@ class StartChartManage { // 优先使用H264,其次是MJPEG if (isH264) { Get.toNamed( - Routers.h264WebView, + Routers.h264View, ); } else if (isMJpeg) { Get.toNamed(