fix:调整缓冲区大小

This commit is contained in:
liyi 2025-05-14 09:08:41 +08:00
parent 7d27de087d
commit 160c4d33ac
4 changed files with 28 additions and 19 deletions

View File

@ -773,7 +773,7 @@ class LockDetailLogic extends BaseGetXController {
return; return;
} }
// //
PacketLossStatistics().reset(); // PacketLossStatistics().reset();
// id // id
StartChartManage() StartChartManage()
.startCallRequestMessageTimer(ToPeerId: network!.peerId ?? ''); .startCallRequestMessageTimer(ToPeerId: network!.peerId ?? '');

View File

@ -606,7 +606,7 @@ class StartChartManage {
void startTalkRejectMessageTimer() async { void startTalkRejectMessageTimer() async {
try { try {
int count = 0; int count = 0;
final int maxCount = 10; // 10 final int maxCount = 3; // 10
talkRejectTimer ??= Timer.periodic( talkRejectTimer ??= Timer.periodic(
Duration(seconds: _defaultIntervalTime), Duration(seconds: _defaultIntervalTime),
@ -632,6 +632,8 @@ class StartChartManage {
stopCallRequestMessageTimer(); stopCallRequestMessageTimer();
stopSendingRbcuInfoMessages(); stopSendingRbcuInfoMessages();
stopSendingRbcuProBeMessages(); stopSendingRbcuProBeMessages();
stopTalkAcceptTimer();
stopCallRequestMessageTimer();
// //
talkePingOverTimeTimerManager.cancel(); talkePingOverTimeTimerManager.cancel();
@ -730,6 +732,8 @@ class StartChartManage {
stopCallRequestMessageTimer(); stopCallRequestMessageTimer();
stopSendingRbcuInfoMessages(); stopSendingRbcuInfoMessages();
stopSendingRbcuProBeMessages(); stopSendingRbcuProBeMessages();
stopTalkAcceptTimer();
stopCallRequestMessageTimer();
// //
talkePingOverTimeTimerManager.cancel(); talkePingOverTimeTimerManager.cancel();
talkDataOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel();

View File

@ -148,7 +148,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
) { ) {
// frameSeq严格递增 // frameSeq严格递增
if (_lastFrameSeq != null && frameSeq <= _lastFrameSeq!) { if (_lastFrameSeq != null && frameSeq <= _lastFrameSeq!) {
//
AppLog.log('丢弃乱序或重复帧: frameSeq=$frameSeq, lastFrameSeq=$_lastFrameSeq'); AppLog.log('丢弃乱序或重复帧: frameSeq=$frameSeq, lastFrameSeq=$_lastFrameSeq');
return; return;
} }
@ -162,13 +161,19 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
'pts': pts, 'pts': pts,
}; };
// P/B帧
while (state.h264FrameBuffer.length >= state.maxFrameBufferSize) {
int pbIndex = state.h264FrameBuffer.indexWhere((f) =>
f['frameType'] == TalkDataH264Frame_FrameTypeE.P);
if (pbIndex != -1) {
state.h264FrameBuffer.removeAt(pbIndex);
} else {
state.h264FrameBuffer.removeAt(0);
}
}
// //
state.h264FrameBuffer.add(frameMap); state.h264FrameBuffer.add(frameMap);
//
while (state.h264FrameBuffer.length > state.maxFrameBufferSize) {
state.h264FrameBuffer.removeAt(0);
}
} }
/// ///
@ -212,16 +217,16 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
int pts = frameMap['pts']; int pts = frameMap['pts'];
// int pts = DateTime.now().millisecondsSinceEpoch; // int pts = DateTime.now().millisecondsSinceEpoch;
// if (frameType == TalkDataH264Frame_FrameTypeE.P) { if (frameType == TalkDataH264Frame_FrameTypeE.P) {
// // frameSeqI为I帧序号标识 // frameSeqI为I帧序号标识
// if (!(_decodedIFrames.contains(frameSeqI))) { if (!(_decodedIFrames.contains(frameSeqI))) {
// AppLog.log('丢弃P帧未收到对应I帧frameSeqI=${frameSeqI}'); AppLog.log('丢弃P帧未收到对应I帧frameSeqI=${frameSeqI}');
// return; return;
// } }
// } else if (frameType == TalkDataH264Frame_FrameTypeE.I) { } else if (frameType == TalkDataH264Frame_FrameTypeE.I) {
// // I帧序号 // I帧序号
// _decodedIFrames.add(frameSeq); _decodedIFrames.add(frameSeq);
// } }
// h264文件 // h264文件
// _appendH264FrameToFile(frameData, frameType); // _appendH264FrameToFile(frameData, frameType);

View File

@ -109,7 +109,7 @@ class TalkViewNativeDecodeState {
// H264帧缓冲区相关 // H264帧缓冲区相关
final List<Map<String, dynamic>> h264FrameBuffer = <Map<String, dynamic>>[]; // H264帧缓冲区 final List<Map<String, dynamic>> h264FrameBuffer = <Map<String, dynamic>>[]; // H264帧缓冲区
final int maxFrameBufferSize = 7; // final int maxFrameBufferSize = 15; //
final int targetFps = 30; // ,native的缓冲区 final int targetFps = 30; // ,native的缓冲区
Timer? frameProcessTimer; // Timer? frameProcessTimer; //
bool isProcessingFrame = false; // bool isProcessingFrame = false; //