fix:调整切换清晰度逻辑

This commit is contained in:
liyi 2025-06-23 15:39:00 +08:00
parent de6d2628f6
commit ce193a2195

View File

@ -91,9 +91,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
int? lastDecodedIFrameSeq; int? lastDecodedIFrameSeq;
//
bool _allowStreamResetOnce = false;
// //
Future<void> _initVideoDecoder() async { Future<void> _initVideoDecoder() async {
try { try {
@ -166,17 +163,16 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
int frameSeqI, int frameSeqI,
ScpMessage scpMessage, ScpMessage scpMessage,
) { ) {
// // frameSeq回绕I帧
if (_allowStreamResetOnce && if (!_pendingStreamReset &&
_lastFrameSeq != null && _lastFrameSeq != null &&
frameType == TalkDataH264Frame_FrameTypeE.I && frameType == TalkDataH264Frame_FrameTypeE.I &&
frameSeq < _lastFrameSeq!) { frameSeq < _lastFrameSeq!) {
// I帧loading并重置所有本地状态 // I帧loading并重置所有本地状态
AppLog.log( AppLog.log(
'检测到新流I帧(仅切换清晰度后允许)frameSeq回绕进入loading并重置: frameSeq=$frameSeq, lastFrameSeq=$_lastFrameSeq'); '检测到新流I帧frameSeq回绕进入loading并重置: frameSeq=$frameSeq, lastFrameSeq=$_lastFrameSeq');
Future.microtask(() => state.isLoading.value = true); Future.microtask(() => state.isLoading.value = true);
_pendingStreamReset = true; _pendingStreamReset = true;
_allowStreamResetOnce = false; //
// //
_stopFrameProcessTimer(); _stopFrameProcessTimer();
// //
@ -189,13 +185,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
_startFrameProcessTimer(); _startFrameProcessTimer();
// returnI帧初始化解码器并解码 // returnI帧初始化解码器并解码
// //
} else if (!_allowStreamResetOnce &&
_lastFrameSeq != null &&
frameType == TalkDataH264Frame_FrameTypeE.I &&
frameSeq < _lastFrameSeq!) {
//
AppLog.log('检测到I帧回绕但未切换清晰度不重置: frameSeq=$frameSeq, lastFrameSeq=$_lastFrameSeq');
return;
} }
// pendingStreamResetI帧 // pendingStreamResetI帧
if (_pendingStreamReset) { if (_pendingStreamReset) {
@ -1344,8 +1333,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
_pendingStreamReset = false; _pendingStreamReset = false;
_pendingResetWidth = width; _pendingResetWidth = width;
_pendingResetHeight = height; _pendingResetHeight = height;
//
_allowStreamResetOnce = true;
} }
void _initHdOptions() { void _initHdOptions() {
@ -1393,9 +1380,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController {
state.isLoading.value = false; state.isLoading.value = false;
}); });
// loading卡住loading
state.isLoading.value = false;
// //
_startFrameProcessTimer(); _startFrameProcessTimer();