fix: 修复自编码模式黑屏问题
- 调整包序号过期检查逻辑,避免同一帧分片被误删 - 适配 Android 14,在创建 VirtualDisplay 前注册 MediaProjection.Callback - 启动后检查编码器实际运行状态,失败时进行清理
This commit is contained in:
@@ -98,9 +98,11 @@ public class SelfCodecDecoder {
|
||||
byte magic = b.get();
|
||||
if (magic != MAGIC) return;
|
||||
int seq = b.getInt();
|
||||
// 关键修复:增加包序号过期检查(处理包乱序或重复)。
|
||||
// 实时视频流中,如果收到了序号更旧的包,直接丢弃以保证延迟和状态一致性。
|
||||
if (lastSeq != -1 && seq <= lastSeq && (lastSeq - seq) < 1000) {
|
||||
// 过期检查:被控端每个“单元”共用同一个 seq(同一单元的所有分片 seq 相同、以 idx 区分),
|
||||
// 因此不能用 seq<=lastSeq 来丢弃——否则同一单元除首片外的分片都会被误删,
|
||||
// 导致大帧永远无法重组、自编码串流黑屏。这里只在 seq 明显小于 lastSeq(旧单元)时丢弃,
|
||||
// 相同 seq(同单元的其它分片)放行。
|
||||
if (lastSeq != -1 && seq < lastSeq && (lastSeq - seq) < 1000) {
|
||||
return;
|
||||
}
|
||||
short total = b.getShort();
|
||||
|
||||
Reference in New Issue
Block a user