From 59fb9384cad8f348eec253f70d359281cc47bd56 Mon Sep 17 00:00:00 2001 From: liyi Date: Mon, 7 Apr 2025 14:44:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=BC=93=E5=86=B2=E5=8C=BA=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 | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/talk/starChart/views/talkView/talk_view_logic.dart b/lib/talk/starChart/views/talkView/talk_view_logic.dart index 523742c4..2c9c4cc0 100644 --- a/lib/talk/starChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/starChart/views/talkView/talk_view_logic.dart @@ -659,32 +659,39 @@ class TalkViewLogic extends BaseGetXController { // 音频帧处理 Future _onFrame(List frame) async { + // 添加最大缓冲限制 + if (_bufferedAudioFrames.length > state.frameLength * 3) { + _bufferedAudioFrames.clear(); // 清空过多积累的数据 + return; + } + // 首先应用固定增益提升基础音量 List amplifiedFrame = _applyGain(frame, 1.6); // 编码为G711数据 List encodedData = G711Tool.encode(amplifiedFrame, 0); // 0表示A-law _bufferedAudioFrames.addAll(encodedData); - - final int ms = DateTime.now().millisecondsSinceEpoch - - state.startRecordingAudioTime.value.millisecondsSinceEpoch; + // 使用相对时间戳 + final int ms = DateTime.now().millisecondsSinceEpoch % 1000000; // 使用循环时间戳 int getFrameLength = state.frameLength; if (Platform.isIOS) { getFrameLength = state.frameLength * 2; } - if (_bufferedAudioFrames.length >= getFrameLength) { - // 发送音频数据到UDP - await StartChartManage() - .sendTalkDataMessage( - talkData: TalkData( - content: _bufferedAudioFrames, - contentType: TalkData_ContentTypeE.G711, - durationMs: ms, - ), - ) - .then((value) { - _bufferedAudioFrames.clear(); - }); + // 添加发送间隔控制 + if (_bufferedAudioFrames.length >= state.frameLength) { + try { + await StartChartManage().sendTalkDataMessage( + talkData: TalkData( + content: _bufferedAudioFrames, + contentType: TalkData_ContentTypeE.G711, + durationMs: ms, + ), + ); + } finally { + _bufferedAudioFrames.clear(); // 确保清理缓冲区 + } + } else { + _bufferedAudioFrames.addAll(encodedData); } }