fix: 修复自编码模式黑屏问题

- 调整包序号过期检查逻辑,避免同一帧分片被误删
- 适配 Android 14,在创建 VirtualDisplay 前注册 MediaProjection.Callback
- 启动后检查编码器实际运行状态,失败时进行清理
This commit is contained in:
TongTongStudio
2026-07-24 20:08:17 +08:00
parent 23698d0be7
commit 3792b75244
3 changed files with 39 additions and 3 deletions

View File

@@ -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();