一、MP4格式基本概念

MP4格式对应标准MPEG-4标准(ISO/IEC14496)

二、MP4封装格式核心概念

  1. MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象编码的第12部分: ISO 基本媒体文件格式/Information technology Coding of audio-visual objects Part 12: ISO base media file format)
    附-- 标准免费下载:PubliclyAvailableStandards
  2. MP4封装格式是基于QuickTime容器格式定义,媒体描述与媒体数据分开,目前被广泛应用于封装h.264视频和ACC音频,是高清视频/HDV的代表。
  3. MP4文件中所有数据都封装在box中(对应QuickTime中的atom),即MP4文件是由若干个box组成,每个box有长度和类型,每个box中还可以包含另外的子box(称container box)。
    一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
  4. MP4中box存储方式为大端模式。一般,标准的box开头会有四个字节的box size。
  5. 几个名词
track 表示一些sample的集合,对于媒体数据来说,track表示一个视频或音频序列。
hint track 特殊的track,并不包含媒体数据,包含的是一些将其他数据track打包成流媒体的指示信息。
sample 对于非hint track来说,video sample即为一帧视频,或一组连续视频帧,audio sample即为一段连续的压缩音频,它们统称sample。对于hint track,sample定义一个或多个流媒体包的格式。
sample table 指明sampe时序和物理布局的表。
chunk 一个track的几个sample组成的单元。

三、MP4封装格式结构图

  1. 实例样本
    来源于Android MediaRecoder视频录制,平台为华为T8300和TCL968,用mp4info查看如下:

用EsEYE查看如下:

用winhex分析如下:

  1. box结构图

接下来对h264编码中有用的几个进行阐述,其它不再描述。

  1. ftyp(file type box)
    如下图所示,开始的四字节00 00 00 00 18表示该box的size为24字节(含头),然后66 74 79 70是ftyp的BOX TYPE,其它是一些格式兼容等相关信息。

  1. mdat
    如下图所示,BOX YPE为6D 64 61 74 ,紧接着的00 00 09 39表示sliece长度

  1. avcC
    如下图所示,红色为BOX TYPE

四、MP4文件中h264的 SPS、PPS获取

  1. 【参考依据】ISO/IEC 14496-15
  2. 【综述】在H264中,SPS和PPS存在于NALU header中,而在MP4文件中,SPS和PPS存在于AVCDecoderConfigurationRecord, 首先要定位avcC.
  3. 【定义】
    ①参数集:一组很少改变的,为大量VCL NALU 提供解码信息的数据。
    序列参数集SPS作用于一系列连续的编码图像,而图像参数集PPS作用于编码视频序列中一个或多个独立的图像。
    如果解码器没能正确接收到这两个参数集,那么其他NALU 也是无法解码的。因此它们一般在发送其它 NALU 之前发送,并且使用不同的信道或者更加可靠的传输协议(如TCP)进行传输,也可以重复传输。
    ②关于AVCDecoderConfigurationRecord结构定义为:

4. 【实例分析】 数据如上avcC图所示,现在对数据进行详细分析

所以,提取的SPS和PPS分别为67 42 00 1E A6 81 41 F9和68 CE 38 80

五、MP4文件中的H264 data /NALU slice

  1. 【参考】H264官方文档 + 毕书—新一代视频压缩编码标准
  2. 【综述】
    ① 在MP4格式文件中,H264 slice并不是以00 00 00 01来作分割,而是存储在mdat box中。
    ② H264基本码流由一些列的NALU组成。原始的NALU单元组成:[start code] + [NALU header] + [NALU payload]
start code 1字节 00 00 01 或 00 00 00 01 需要添加的
NALU header 1字节 如下3 通过mdat定位

③ H264基本码流结构分两层:视频编码层VCL和网络适配层NAL,这样使信号处理和网路传输分离

VCL 负责高效视频内容表示
NAL 以网络所要求的恰当方式对数据进行打包和发送
  1. 【定义】 NALU header

+---------------+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+

|F|NRI| Type |

+---------------+

特别的,当值为7和8分别为SPS和PPS。

毕书(P191)上的定义为:

  1. 【实例分析】数据分析,数据如上图mdat所示
6D 64 61 74 mdat BOX TYPE
00 00 09 39 silce长度,2361

接下来的65就是NALU header,可以由65&0x1F来求的后五个bit,从而得知此slice为I frame

注意,mdat与silce之间有可能存在若干占位符,我在TCL手机测试时就出现了连续的00的占位符,这样后面用H264硬编码时会比较麻烦一点。

Ref/Related
1 相关资料和工具在文中链接下载
2 http://www.52rd.com/Blog/wqyuwss/559/4/
3 http://blog.csdn.net/szu030606/article/details/5943279
4 http://blog.csdn.net/k1988/article/details/5654631
5 http://www.cppblog.com/czanyou/archive/2008/11/26/67940.html
6 http://krdai.info/blog/sps-pps-in-mp4-format.html
7 http://www.cnitblog.com/zouzheng/archive/2007/04/04/25155.html
8 http://bbs.chinavideo.org/viewthread.php?tid=10273

作者:skyseraph
出处:http://www.cnblogs.com/skyseraph/
更多精彩请直接访问SkySeraph个人站点:http://skyseraph.com//
Email/GTalk: zgzhaobo@gmail.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

【流媒体】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流相关推荐

  1. 【流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    原文地址为: [流媒體]H264-MP4格式及在MP4文件中提取H264的SPS.PPS及码流 [流媒體]H264-MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph A ...

  2. [转]【流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    [流媒體]H264-MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph Apr 1st 2012  Email:skyseraph00@163 .com 一.MP4格式基 ...

  3. 流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    源地址:http://www.cnblogs.com/skyseraph/archive/2012/04/01/2429384.html [流媒體]H264-MP4格式及在MP4文件中提取H264的S ...

  4. 【转载】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    [流媒體]H264-MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph Apr 1st 2012 Email:skyseraph00@163.com 一.MP4格式基本概 ...

  5. 从flv文件中提取h264码流(使用av_bsf_send_packet和av_bsf_receive_packet)

    最近在学习音视频开发,需要开发一个从flv文件中提取h264码流的demo. 具体的原理,在雷神的文章中写的很清楚了: https://blog.csdn.net/leixiaohua1020/art ...

  6. H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    SkySeraph Apr 1st 2012 Email:skyseraph00@163.com 一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装 ...

  7. MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  8. Mp4文件中提取H264码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  9. 使用代码从抓包文件中提取H264码流

    1 从抓包文件中过滤出包含单条流的RTP包 使用ssrc 或者 payload type过滤皆可,具体如下图: 2 使用wireshark可以提前分析下本条码流到底有没有丢包 这样就可以预先知道这条流 ...

最新文章

  1. mysq 开启慢查询日志
  2. POJ - 1236 Network of Schools
  3. Linux之read命令使用
  4. 解决zabbix-agent二进制班不能连接使用docker搭建的zabbix-server
  5. [html] 如何放大点击的区域?
  6. 计算机二维动画的核心技术是什么意思,数字化技术在二维动画设计中的应用研究...
  7. 医疗机构被勒索软件攻击的可能性是金融机构的114倍
  8. 基于tensorflow 1.x 的bert系列预训练模型工具
  9. 简单实用的网游服务器架构
  10. Vue学习笔记(六)
  11. Hokuyo‘s first try
  12. 合肥工业大学宣城java实验报告,合肥工业大学宣城校区,程序设计基础上机实验,周波老师仅供参考(修正版).doc...
  13. 人生的第一篇博客φ(>ω<*)
  14. NO.003-2018.02.08《江城子·乙卯正月二十日夜记梦》宋代:苏轼
  15. k8s的namespace资源一直terminating问题解决
  16. jzyz 1225 调查干草
  17. 如何还原MySQL备份文件.xb
  18. Label 标签使用
  19. DRL经典文献阅读(二):确定性策略梯度(DPG+DDPG)【附代码】
  20. Terminal软件

热门文章

  1. 教你如何利用微信小程序高效地完成地图点位标注
  2. OSChina 周六乱弹 —— 开源中国十周年我们继续努力
  3. 怎样实现Word2003转PDF?无需插件即可另存为PDF的虚拟打印机法
  4. SDSC2018 Day1
  5. 米家小相机最新固件_#本站首晒#699元的运动相机 — 小米 米家小相机开箱简评...
  6. luogu 1498 南蛮图腾
  7. 软件测试工程师必备——禅道的安装
  8. 出差杂记----终极六人行
  9. EQ——音频处理的利器
  10. FM1906段码屏驱动