我已成功使用ffmpeg创建了Hevc / mp4位流。但在使用十六进制编辑器分析后,我无法在mp4文件中找到VPS,SPS,PPS数据。
然后我使用了LAV Splitter并检查了分离器的输出,但它发送的是第一帧数据而不是VPS / SPS / PPS数据。即使我经历了this link但没有得到任何东西。那么在DirectShow过滤器中哪里可以找到VPS,SPS,Hevc / mp4格式的PPS?
答案 0 :(得分:3)
无法使用directshow帮助您,但以下是使用任何十六进制编辑器在mp4文件中找到HEVC VPS,SPS和PPS数据的方法。
首先,您需要找到moov框,它位于非常接近文件的开头,或者非常接近结尾。它由4个ascii字符标识:' moov'
此后的一些字节,应该显示一个hvcC框。
此后的数据提供了有关mp4文件中hevc流的一般信息。其格式在ISO / IEC 14496-15中定义。简而言之,跳过接下来的22个字节。
然后,解析以下数据:
unsigned int(8) numOfArrays;
for (j=0; j < numOfArrays; j++) {
bit(1) array_completeness;
unsigned int(1) reserved = 0;
unsigned int(6) NAL_unit_type;
unsigned int(16) numNalus;
for (i=0; i< numNalus; i++) {
unsigned int(16) nalUnitLength;
bit(8*nalUnitLength) nalUnit;
}
}
然后,每个数组对应于一种类型的一组NAL单元,例如,一套SPS。对于VPS,SPS和PPS,您需要NAL_unit_type分别等于32,33和34的数组。
在我用作示例的内容中,您已经可以看到4个阵列可用。第一个数组是一组NAL单元,其NAL_unit_type = 32(= 0x20),因此SPS。只存在一个SPS,其长度为0x0018 = 24个字节。 SPS数据以0x40010C01开头。