H264文件封装MP4文件
2017-04-28 17:39
92 查看
推荐一篇优秀的博文.对于MP4的初学者很有用:http://blog.csdn.net/chenchong_219/article/details/44263691
对于这篇博文最后 Sample Table Box部分我想做一些补充,如有不足之处请大家指出.
这篇文章以h264的数据封装到MP4为例子.
“stbl”包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。“stbl”是一个container box,其子box包括:sample description box(stsd)、time
to sample box(stts)、sample size box(stsz或stz2)、sample to chunk box(stsc)、chunk offset box(stco或co64)、composition time to sample box(ctts)、sync sample box(stss)等。
(N对应具体格式,AVC对应ISO-14496-15 )
结构如下:
这里我封装的是h264裸流数据 ,对应的是avcc的格式
这里面的信息对应的需要提取裸流数据里面的sps和pps,(可以查看一下NALU提取和解析方面的文章).
Sample count描述的是:当前相同占用的时间的chunk的数量.
Sample delta描述的是:当前chunk占用的时间
如果每个chunk的占用时间是一样的,那么这个box里面只要记录一行数据就够了
比如
(比如:Time scale为90000,一个chunk用了300个单位,那么占用的时间就是就是半秒).
First chunk:这个记录了第一个相同对应关系的chunk序号
Samples per chunk:记录了当前chunk下面帧的数量
Samples description index:记录了这一组chunk对应的stsd里面数据的序号.一般情况stsd里面只有一个数据,所以这里是一.
我的mdat里面每个数据前面带4个字节记录数据的长度(这个长度不包括本身的4个字节).封装的数据是要把sps和pps都去掉的.比如我的I帧去掉sps,pps以及65前面的0x000001 ,从65开始封装.
这里推荐一个分析MP4文件的工具:MP4 Reader 非常的好用,百度下载就可以了.
对于这篇博文最后 Sample Table Box部分我想做一些补充,如有不足之处请大家指出.
这篇文章以h264的数据封装到MP4为例子.
“stbl”包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。“stbl”是一个container box,其子box包括:sample description box(stsd)、time
to sample box(stts)、sample size box(stsz或stz2)、sample to chunk box(stsc)、chunk offset box(stco或co64)、composition time to sample box(ctts)、sync sample box(stss)等。
1.stsd
这个box中包含的音频的采样率,声道,样本,视频的sps,pps等信息,这些信息的结构可以看官方文档ISO-14496-N(N对应具体格式,AVC对应ISO-14496-15 )
结构如下:
这里我封装的是h264裸流数据 ,对应的是avcc的格式
这里面的信息对应的需要提取裸流数据里面的sps和pps,(可以查看一下NALU提取和解析方面的文章).
2.stts
这个box是以chunk为单位对应chunk占用的时间.Sample count描述的是:当前相同占用的时间的chunk的数量.
Sample delta描述的是:当前chunk占用的时间
如果每个chunk的占用时间是一样的,那么这个box里面只要记录一行数据就够了
比如
List | ||
No. | Sample count | Sample delta |
1 | 6123(一共6123个chunk,这里应该是一个chunk就是一个Sample) | 1000 |
3.stss
记录了关键帧的序号位置,比如h264数据里面i帧的序号位置.4.stsc
这个box记录和chunk和stsd里面的对应关系.First chunk:这个记录了第一个相同对应关系的chunk序号
Samples per chunk:记录了当前chunk下面帧的数量
Samples description index:记录了这一组chunk对应的stsd里面数据的序号.一般情况stsd里面只有一个数据,所以这里是一.
5.stsz
这个box简单记录了每个Sample(帧)的长度(比如我封装到mdat里面的每个帧前面都带有4个字节表示后续数据的大小),这里指的是包括这4个字节长度,数据长度+4.6.stco
这个记录的是每个chunk在当前MP4文件中的起始偏移位置,这个偏移是从文件的开始(0x0000000)算起的.我的mdat里面每个数据前面带4个字节记录数据的长度(这个长度不包括本身的4个字节).封装的数据是要把sps和pps都去掉的.比如我的I帧去掉sps,pps以及65前面的0x000001 ,从65开始封装.
这里推荐一个分析MP4文件的工具:MP4 Reader 非常的好用,百度下载就可以了.
相关文章推荐
- H264 视频文件 帧格式 传输封装等
- H264 视频文件 帧格式 传输封装等 杂碎
- ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决
- 【转】H264 视频文件 帧格式 传输封装等 杂碎
- 测试验证:h264实时流封装ts文件存储,完整实现
- flv文件格式及h264 aac流封装成flv
- H264 视频文件 帧格式 传输封装等 杂碎
- H264 数据avi文件封装和拆解
- H264 视频文件 帧格式 传输封装等 杂碎
- H264 视频文件 帧格式 传输封装等 杂碎
- 使用FFMPEG从MP4封装中提取视频流到H264文件
- H264 视频文件 帧格式 传输封装等 杂碎
- H264编码的MP4文件封装RTP包发送给VLC播放器播放
- linux下利用mp4v2库将h264和aac文件封装成MP4
- H264 数据avi文件封装和拆解
- 使用FFMPEG从MP4封装中提取视频流到H264文件
- H264 视频文件 帧格式 传输封装等 杂碎
- H264 数据avi文件封装和拆解
- H264 视频文件 帧格式 传输封装等 杂碎
- H264 视频文件 帧格式 传输封装等【转】