首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

MP4文件NALU读取解决方案

2014-03-14 
MP4文件NALU读取各位大牛好!我现在在做关于MP4文件解析的一个程序,通过现有的解析器可以按照sample chunk

MP4文件NALU读取
各位大牛好!我现在在做关于MP4文件解析的一个程序,通过现有的解析器可以按照sample chunk的偏移和sample在chunk中的偏移计算得到sample的偏移,然后从mdat中读取得到这个sample块的数据,刚开始以为这个sample块就是NALU,只不过开头没有NALU的start code,而是一个length为4的大小,网上也有很多人说这个就是NALU,但是我用ffmpeg得到的raw NALU与这个差很多,因此,我想问一下MP4中的sample与NALU之间的关系,以及怎样才能从MP4文件中得到NAL单元,先谢过~~ MP4 NAL
[解决办法]
因为你没有把SPS,PPS信息给解码器,它们在avc1 box里吧。
[解决办法]
0x_7就是sps,你可以看看h264得文档,从你的话语看出你还不是很了解h264视频格式,0x_8是pps。你一开始说得没错,mdat box中的就是nalu,只不过没有startcode,你要还原0x 00 00 00 01回去才能解码,还原的方法,应该是先看stco,找到chunk的起始位置,然后按照stsz,找到一贞的大小,传送出来,还原start code,判断是不是I贞,如果是还原sps pps,然后看stsc,确定这个chunk到底有多少贞,如此往复。其次,你之所以不能解码,是因为没有将stsd-->avcC-->avc1中的sps pps部分还原给GOP的最开头。

你所要做的在行业内称之为容器码流的解复用,也就是demux,可以参考ffmpeg
[解决办法]

引用:
Quote: 引用:

因为你没有把SPS,PPS信息给解码器,它们在avc1 box里吧。


我是使用的NVIDIA的NVCUVID,使用的它的parser和decoder来进行硬解码,parser需要的数据是raw NALU,但我不能确定是否就是按你说的那样需要SPS和PPS,但是我使用之前的测试数据开头是类似这样的“00 00 00 01 67 64 00 1E AC D9 40 B4 3D B0 11 00 00 03 03 E9 00 00 EA 60 0F 16 2D 96 00 00 00”,这个是raw NALU,可是NALU header 67也不是SPS或PPS啊 



估计这个MDATA中获取的一帧数据由3个NALU组成:PPS、SPS, 原始数据,硬解的话可能比较严格,只能送原始数据,所以你可能需要把前面的PPS和SPS去掉。

H264数据封装有的前四BYTE是STARTCODE,有的前4BYTE是表示长度,你要改成STARTCODE,

热点排行