From 9504a97bde7c9678e70b5dcc3d86cd102e25be3e Mon Sep 17 00:00:00 2001 From: liyi Date: Mon, 20 Jan 2025 16:23:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=AE=B2?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E9=80=9A=E8=AF=9D=E8=AE=A1=E6=97=B6=E3=80=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AF=B9=E8=AE=B2=E6=97=B6=E7=94=BB=E5=B8=83?= =?UTF-8?q?=E6=97=8B=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/talkView/talk_view_logic.dart | 21 ++++++---- .../views/talkView/talk_view_page.dart | 38 ++++++++++++++++--- .../views/talkView/talk_view_state.dart | 3 +- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/lib/talk/startChart/views/talkView/talk_view_logic.dart b/lib/talk/startChart/views/talkView/talk_view_logic.dart index cf6eb32b..310a3c4d 100644 --- a/lib/talk/startChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/startChart/views/talkView/talk_view_logic.dart @@ -50,7 +50,6 @@ class TalkViewLogic extends BaseGetXController { int audioFrameIntervalMs = 20; // 初始帧间隔设置为45毫秒(约22FPS) int minFrameIntervalMs = 30; // 最小帧间隔(约33 FPS) int maxFrameIntervalMs = 100; // 最大帧间隔(约1 FPS) - // int maxFrameIntervalMs = 100; // 最大帧间隔(约10 FPS) /// 初始化音频播放器 void _initFlutterPcmSound() { @@ -118,6 +117,17 @@ class TalkViewLogic extends BaseGetXController { case TalkStatus.end: _handleInvalidTalkStatus(); break; + case TalkStatus.answeredSuccessfully: + state.oneMinuteTimeTimer?.cancel(); // 取消旧定时器 + state.oneMinuteTimeTimer ??= + Timer.periodic(const Duration(seconds: 1), (Timer t) { + state.oneMinuteTime.value++; + if (state.oneMinuteTime.value >= 60) { + t.cancel(); // 取消定时器 + state.oneMinuteTime.value = 0; + } + }); + break; default: // 其他状态的处理 break; @@ -160,12 +170,6 @@ class TalkViewLogic extends BaseGetXController { /// 动态调整帧间隔 void _adjustFrameInterval() { int newFrameIntervalMs = frameIntervalMs; - if (state.networkStatus.value == NetworkStatus.lagging) { - bufferSize = 60; // 增大缓冲区 - } else { - bufferSize = 40; // 恢复默认缓冲区大小 - } - if (state.videoBuffer.length < 10 && frameIntervalMs < maxFrameIntervalMs) { // 如果缓冲区较小且帧间隔小于最大值,则增加帧间隔 frameIntervalMs += 5; @@ -442,7 +446,8 @@ class TalkViewLogic extends BaseGetXController { _syncTimer = null; // 释放定时器引用 _audioTimer?.cancel(); _audioTimer = null; // 释放定时器引用 - + state.oneMinuteTimeTimer?.cancel(); + state.oneMinuteTimeTimer = null; stopProcessingAudio(); super.onClose(); } diff --git a/lib/talk/startChart/views/talkView/talk_view_page.dart b/lib/talk/startChart/views/talkView/talk_view_page.dart index e63a8591..604b0f30 100644 --- a/lib/talk/startChart/views/talkView/talk_view_page.dart +++ b/lib/talk/startChart/views/talkView/talk_view_page.dart @@ -107,13 +107,13 @@ class _TalkViewPageState extends State canPop: false, child: RepaintBoundary( key: state.globalKey, - child: Transform.rotate( - angle: - state.rotateAngle.value * (pi / 180), // 旋转 90 度 - child: Transform.scale( - scale: scale, // 动态计算的缩放比例 + child: SizedBox.expand( + child: RotatedBox( + quarterTurns: -1, child: Image.memory( state.listData.value, + width: ScreenUtil().scaleWidth, + height: ScreenUtil().scaleHeight, gaplessPlayback: true, fit: BoxFit.cover, filterQuality: FilterQuality.high, @@ -139,6 +139,34 @@ class _TalkViewPageState extends State style: TextStyle(color: Colors.black, fontSize: 26.sp), )) : Container()), + Obx( + () => state.listData.value.isNotEmpty + ? Positioned( + top: ScreenUtil().statusBarHeight + 75.h, + width: 1.sw, + child: Obx( + () { + final String sec = (state.oneMinuteTime.value % 60) + .toString() + .padLeft(2, '0'); + final String min = (state.oneMinuteTime.value ~/ 60) + .toString() + .padLeft(2, '0'); + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '$min:$sec', + style: TextStyle( + fontSize: 26.sp, color: Colors.white), + ), + ], + ); + }, + ), + ) + : Container(), + ), Positioned( bottom: 10.w, child: Container( diff --git a/lib/talk/startChart/views/talkView/talk_view_state.dart b/lib/talk/startChart/views/talkView/talk_view_state.dart index ccf85967..21d6db4c 100644 --- a/lib/talk/startChart/views/talkView/talk_view_state.dart +++ b/lib/talk/startChart/views/talkView/talk_view_state.dart @@ -37,8 +37,7 @@ class TalkViewState { RxList listAudioData = [].obs; //得到的音频流字节数据 GlobalKey globalKey = GlobalKey(); - late Timer oneMinuteTimeTimer = - Timer(const Duration(seconds: 1), () {}); // 定时器超过60秒关闭当前界面 + Timer? oneMinuteTimeTimer; // 定时器超过60秒关闭当前界面 RxInt oneMinuteTime = 0.obs; // 定时器秒数 // 定时器如果发送了接听的命令 而没收到回复就每秒重复发送10次