格式化AVC / H.264 mdat

时间:2018-11-29 02:34:12

标签: mp4 h.264

任何人都可以告诉我或指向规范的一部分,以清楚地演示如何从具有一系列NALU的基本流中将这些如何写入ISO BMFF mdat吗?

我看到正在查看的样本和其他代码,例如:AUD,SPS,PPS,SEI,VideoSlice,AUD等

我不完全了解的事情:

  1. 如果SPS和PPS也被带外存储在AVCC中,那么在mdat中是否需要它们?
  2. 如果在mdat中需要它们,应在何时何地编写它们?例如就在IDR之前?
  3. 对澳元有什么要求?
  4. 如果我正在为裁切生成样本大小,这是计算结果吗?在该示例中,我正在尝试在trun中重新创建第一个样本,其大小为22817,但是如果我在mdat中查看第一个样本,则NALU大小前缀为22678。trun中的值似乎是所有NALUs +大小不超过第一个样本(包括下面的示例)

>

1 0016E405 (1500165) - box.Size
2 6D646174 (mdat) - box.Type
3 00000002 (2) NAL Size
4 0910 - (2) AUD @ 5187
5 00000025 (37)
6 27640020 AC248C0F 0117EF01 10000003 00100000 078E2800 0F424001 E84EF7B8 0F844229 C0 (37) @ 5193 SPS
7 00000004 (4)
8 28DEBCB0 (4) PPS
9 0000000B (11)
10 06000781 36288029 67C080 (? SEI ?)
11 0000000C (12)
12 06010700 00F00000 03020480 (? SEI is type 6)
13 0000002D (45) @ 5269
14 060429B5 00314741 393403CA FFFC8080 FA0000FA 0000FA00 00FA0000 FA0000FA 0000FA00 00FA0000 FA0000FF 80 (SEI ??)
15 00005896 (22678)
16 25888010 02047843 00580010 08410410 0002….. 22678 bytes video @ 5322

1 个答案:

答案 0 :(得分:1)

  

如果SPS和PPS也被带外存储在AVCC中,那么它们在mdat中是必需的吗?

  

如果在mdat中需要它们,应在何时何地编写它们?例如就在IDR之前?

是的,如果您选择包括它们,但没有理由

  

对澳元有什么要求?

它们是可选的

  

如果我正在为样本生成样本大小,这是计算结果吗?

访问单元中的字节数(AU,又称帧)。其中可能包含多个NALU。 SPS / PPS / SEI / AUD都计入AU大小。前缀为每个NALU的4字节大小也计入trun中记录的AU大小。

bytes
    4 | 3 00000002 (2) NAL Size
    2 | 4 0910 - (2) AUD @ 5187
    4 | 5 00000025 (37)
   37 | 6 27640020 AC248C0F 0117EF01 10000003 00100000 078E2800 0F424001 E84EF7B8 0F844229 C0 (37) @ 5193 SPS
    4 | 7 00000004 (4)
    4 | 8 28DEBCB0 (4) PPS
    4 | 9 0000000B (11)
   11 | 10 06000781 36288029 67C080 (? SEI ?)
    4 | 11 0000000C (12)
   12 | 12 06010700 00F00000 03020480 (? SEI is type 6)
    4 | 13 0000002D (45) @ 5269
   45 | 14 060429B5 00314741 393403CA FFFC8080 FA0000FA 0000FA00 00FA0000 FA0000FA 0000FA00 00FA0000 FA0000FF 80 (SEI ??)
    4 | 15 00005896 (22678)
22678 | 16 25888010 02047843 00580010 08410410 0002….. 22678 bytes video @ 5322
------| 
22817 | <- bytes total