
问题背景:
前面已经讲了好几种封装格式包括了TS、FLV、RTP等。现在用几篇文章讲解下MP4,这种封装格式设计思路和前面都不太一样,其应用范围最广、灵活性最高、跨平台最好,兼容性最强。带来的负面影响就是格式本身比较复杂,特别是在封装和转封装方面代码实现起来比较长。
这个系列会和前面讲解思路一样,本篇会讲解下MP4的整体框架和结构,下篇会讲解下MP4的详细标准,同时用一个实例分析下对应字段含义以及H264打包方法,最后一篇文章讲下MP4的应用,内容大致包含:
1. 计算电影图像宽度和高度
2. 计算电影声音采样频率
3. 计算视频帧率
4. 计算电影的比特率
5. 查找sample方法
6. 查找关键帧和实现随机拖动播放
7.如何完成MP4首屏秒开即前置moov box
你可以选择你感兴趣的篇章进行阅读,欢迎后台分享MP4在实际应用的案例分享,特别是关于H265方面的实践。我后面还会分享下基于HLS协议的FFmpeg对H265的FMP4切片在平安校园方面的实践。
MP4概念&术语:
概念:
MP4起源于QuickTime,全名是MPEG-4 Part 14,属于MPEG-4的一部分。这部分内容主要规定了多媒体容器的格式。后来成为”ISO/IEC 14996-14”国际标准, 其中MP4就是对这种标准的一种具体实现,基于这个标准进行扩展或者裁剪还产生了像M4V、F4V等封装格式。
同时MP4目前在移动端的Androids和IOS可以播放,也可以在FlashPlayer播放,跨平台和兼容性最好,MP4 还可以实现快进快放,边下载边播放的效果。
术语:
为了后面能比较规范的了解这种文件格式,这里需要了解下面几个概念和术语,这些概念和术语是理解好MP4媒体封装格式和其操作算法的关键。
Box:这个概念起源于QuickTime中的atom,也就是说MP4文件就是由一个个Box组成的,可以将其理解为一个数据块,它由Header+Data组成,Data 可以存储媒体元数据和实际的音视频码流数据。Box里面可以直接存储数据块但是也可以包含其它类型的Box,我们把这种Box又称为container box。
Sample:简单理解为采样,对于视频可以理解为一