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;
}
//
PacketLossStatistics().reset();
// PacketLossStatistics().reset();
// id
StartChartManage()
.startCallRequestMessageTimer(ToPeerId: network!.peerId ?? '');

View File

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

View File

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

View File

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