import 'dart:typed_data'; /// SPS/PPS/I帧依赖关系管理器 class FrameDependencyManager { Uint8List? _sps; Uint8List? _pps; final int windowSize = 30; final List _iFrameSeqWindow = []; /// 更新SPS缓存 void updateSps(Uint8List sps) { _sps = sps; } /// 更新PPS缓存 void updatePps(Uint8List pps) { _pps = pps; } Uint8List? get sps => _sps; Uint8List? get pps => _pps; /// 判断是否有可用I帧 bool get hasIFrame => _iFrameSeqWindow.isNotEmpty; int? get lastIFrameSeq => _iFrameSeqWindow.isNotEmpty ? _iFrameSeqWindow.last : null; void updateIFrameSeq(int seq) { _iFrameSeqWindow.add(seq); if (_iFrameSeqWindow.length > windowSize) { _iFrameSeqWindow.removeAt(0); } } /// 判断指定I帧序号是否在滑动窗口内 bool isIFrameDecoded(int? seq) { return seq != null && _iFrameSeqWindow.contains(seq); } }