我正在编写一个检查MP4文件的工具(又名ISO基础媒体文件格式,ISO 14496第12部分).
我可以解释ISO 14496-12中列出的大多数由OSS生成的框.我还没有弄清楚如何提取单个视频访问单元和音频访问单元.
我有理由相信'mdat'框中的H.264视频在NAL单元上没有ISO 14496-10附录B"0x000001"前缀.
我已经尝试解释SampleToChunkBox('stsc'),SampleSizeBox('stsz')和ChunkOffsetBox('stco')来定位'mdat'中的媒体样本,但我似乎无法找到任何我能解释的内容作为nal_unit()(ISO 14496-10第7.3.1节)或slice_header()(第7.3.3节).
我也很好奇SPS(7.3.2.1)和PPS(7.3.2.2)的存在.我怀疑这些人住在'trak'盒子里面的某个地方,但我还没弄明白哪里.
应用程序或库的指针实用性有限.我正在编写一个应用程序,与数学解释相比,外部源代码更难理解(受其自身框架的阻碍).
花了几个小时在堆栈溢出中搜索其他问题后,我最终偶然发现了简短的回复,这使我得到了更全面的答案.
ISO 14496第15部分介绍了ISO媒体文件中H.264的封装.SPS和PPS存储在5.3.4.1.2和5.2.4.1.1节中记录的'avcC'框中.此框还会告诉您解释样本时长度字段的长度.
样品记录在5.2.3节中,由一系列以长度为前缀的NAL单元组成.来自ffmpeg的示例MP4每个样本具有一个切片,但是第一个样本包括SEI,其包含记录H.264编解码器的版本和编码参数的文本.