fix:增加缓冲区逻辑

This commit is contained in:
liyi 2025-04-16 14:16:27 +08:00
parent 4234464533
commit a259ed9dd3
2 changed files with 13 additions and 36 deletions

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart';
class TalkDataRepository { class TalkDataRepository {
//
TalkDataRepository._() { TalkDataRepository._() {
_talkDataStreamController = StreamController<TalkData>.broadcast( _talkDataStreamController = StreamController<TalkData>.broadcast(
onListen: () { onListen: () {
@ -11,47 +10,26 @@ class TalkDataRepository {
onCancel: () { onCancel: () {
_isListening = false; _isListening = false;
}, },
sync: false, // sync: false, //
); );
} }
// 使 _instance
static final TalkDataRepository _instance = TalkDataRepository._(); static final TalkDataRepository _instance = TalkDataRepository._();
//
static TalkDataRepository get instance => _instance; static TalkDataRepository get instance => _instance;
// StreamController
late final StreamController<TalkData> _talkDataStreamController; late final StreamController<TalkData> _talkDataStreamController;
bool _isListening = false; bool _isListening = false;
// //
final List<TalkData> _buffer = []; Stream<TalkData> get talkDataStream => _talkDataStreamController.stream;
// Stream
Stream<TalkData> get talkDataStream =>
_talkDataStreamController.stream.transform(
StreamTransformer<TalkData, TalkData>.fromHandlers(
handleData: (TalkData data, EventSink<TalkData> sink) {
// 100
if (_buffer.length >= 100) {
_buffer.removeAt(0); //
}
_buffer.add(data);
sink.add(data);
},
),
);
// TalkData Stream
void addTalkData(TalkData talkData) { void addTalkData(TalkData talkData) {
if (_isListening) { if (_isListening) {
_talkDataStreamController.add(talkData); _talkDataStreamController.add(talkData);
} }
} }
// StreamController
void dispose() { void dispose() {
_talkDataStreamController.close(); _talkDataStreamController.close();
} }

View File

@ -38,8 +38,8 @@ class TalkViewLogic extends BaseGetXController {
final LockDetailState lockDetailState = Get.put(LockDetailLogic()).state; final LockDetailState lockDetailState = Get.put(LockDetailLogic()).state;
final int minBufferSize = 2; // 2166ms final int minBufferSize = 2; // 2166ms
final int maxBufferSize = 8; // 8666ms final int maxBufferSize = 20; // 8666ms
int bufferSize = 20; // int bufferSize = 8; //
// //
final int minAudioBufferSize = 1; // 1 final int minAudioBufferSize = 1; // 1
final int maxAudioBufferSize = 3; // 3 final int maxAudioBufferSize = 3; // 3
@ -137,11 +137,11 @@ class TalkViewLogic extends BaseGetXController {
} }
// AppLog.log('其他帧的时间戳:${talkData.durationMs}'); // AppLog.log('其他帧的时间戳:${talkData.durationMs}');
// //
// if (_lastFrameTimestamp != 0) { if (_lastFrameTimestamp != 0) {
// final int frameInterval = talkData.durationMs - _lastFrameTimestamp; final int frameInterval = talkData.durationMs - _lastFrameTimestamp;
// _adjustBufferSize(frameInterval); // _adjustBufferSize(frameInterval); //
// } }
// _lastFrameTimestamp = talkData.durationMs; // _lastFrameTimestamp = talkData.durationMs; //
// //
if (state.videoBuffer.length >= bufferSize) { if (state.videoBuffer.length >= bufferSize) {
@ -184,7 +184,7 @@ class TalkViewLogic extends BaseGetXController {
state.listData.value = Uint8List.fromList(oldestFrame.content); state.listData.value = Uint8List.fromList(oldestFrame.content);
state.videoBuffer.removeAt(oldestIndex); // state.videoBuffer.removeAt(oldestIndex); //
// // //
// _frameCount++; // _frameCount++;
// final currentTime = DateTime.now().millisecondsSinceEpoch; // final currentTime = DateTime.now().millisecondsSinceEpoch;
// final elapsed = currentTime - _lastFpsUpdateTime; // final elapsed = currentTime - _lastFpsUpdateTime;
@ -195,9 +195,7 @@ class TalkViewLogic extends BaseGetXController {
// _frameCount = 0; // _frameCount = 0;
// _lastFpsUpdateTime = currentTime; // _lastFpsUpdateTime = currentTime;
// } // }
// AppLog.log('🎬 播放帧 - 缓冲区剩余: ${state.videoBuffer.length}/${bufferSize}, '
// '播放延迟: ${currentTime - oldestFrame.durationMs}ms, '
// '帧时间戳: ${oldestFrame.durationMs}');
} else { } else {
// AppLog.log('⚠️ 帧未找到缓存 - Key: $cacheKey'); // AppLog.log('⚠️ 帧未找到缓存 - Key: $cacheKey');
state.videoBuffer.removeAt(oldestIndex); // state.videoBuffer.removeAt(oldestIndex); //
@ -499,6 +497,7 @@ class TalkViewLogic extends BaseGetXController {
_initAudioRecorder(); _initAudioRecorder();
requestPermissions(); requestPermissions();
} }
@override @override