如何从视频数据包中识别 IDR 帧

How to identify an IDR frame from the Video packet

我需要能够检查 ts 数据包(查看视频 PID 481)并确定该数据包是否包含 IDR 帧。我的理解是,我需要寻找一个 NAL 单元起始代码,然后是其他内容以表示它是 IDR 帧的开始。请问有人可以澄清一下吗?

这是一个我认为是 IDR 帧的数据包示例,但需要能够从有效负载数据中证明它:

* Packet 2
  ---- TS Header ----
  PID: 481 (0x01E1), header size: 12, sync: 0x47
  Error: 0, unit start: 1, priority: 0
  Scrambling: 0, continuity counter: 1
  Adaptation field: yes (8 bytes), payload: yes (176 bytes)
  Discontinuity: 1, random access: 1, ES priority: 0
  PCR: 0x000000013A5
  ---- PES Header ----
  Stream id: 0xE0 (Video 0)
  PES packet length: 0 (unbounded)
  ---- Full TS Packet Content ----
  47 41 E1 31 07 D0 00 00 00 08 7E E5 00 00 01 E0 00 00 84 C0 0A 31 00 05
  E5 CD 11 00 05 AD 8D 00 00 00 01 09 10 00 00 00 01 67 64 00 29 AC D9 40
  78 04 4F DE 02 94 04 04 05 00 00 03 00 01 00 00 03 00 32 E6 80 00 F4 24
  00 04 F5 8A 49 30 0F 8B 16 CB 00 00 00 01 68 FA A7 CB 00 00 01 06 00 05
  95 6C 60 E4 85 80 00 00 01 06 05 FF FF F5 DC 45 E9 BD E6 D9 48 B7 96 2C
  D8 20 D9 23 EE EF 78 32 36 34 20 2D 20 63 6F 72 65 20 31 34 38 20 2D 20
  48 2E 32 36 34 2F 4D 50 45 47 2D 34 20 41 56 43 20 63 6F 64 65 63 20 2D
  20 43 6F 70 79 72 69 67 68 74 20 32 30 30 33 2D 32 30 31 36

无法从那个数据包中分辨出来。然而,它很可能是 IDR。我说这很有可能,因为查看 NALU,我可以看到 AUD 00 00 00 01 09、SPS 00 00 00 01 67、PPS 00 00 00 01 68 然后是 SEI 00 00 01 06

然而,SEI 获取数据包的剩余字节,您将需要继续从该 PID 读取数据包,直到您确定下一个 NALU 并查看它是否是 IDR。