一、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)

 附-- 标准免费下载: Freely Available Standards   http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html

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分析如下:

2 box结构图

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

3 ftyp(file type box)

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

4  mdat

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

5 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

以网络所要求的恰当方式对数据进行打包和发送

3  【定义】 NALU header

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

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

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

|F|NRI| Type |

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

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

毕书(下载)(P191)上的定义为:

4  【实例分析】数据分析,数据如上图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

转载于:https://www.cnblogs.com/huty/p/8518877.html

【VS开发】MP4与H.264相关推荐

  1. H.264 媒体流 AnnexB 和 AVCC 格式分析 及 FFmpeg 解析mp4的H.264码流方法

    H264码流分两种组织方式,一种是AnnexB格式,一种是AVCC格式. 作者:码农小明 来源:https://blog.csdn.net/shaosunrise/article/details/12 ...

  2. (转载)H.264码流的RTP封包说明

    H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...

  3. 2005年全球H.264编解码器荟萃

    2005年全球H.264编解码器荟萃 videosky.9126.com Peter Lee 2005-0920 [摘要] H.264/AVC作为最新的视频编码标准,研究领域和产业界都非常看好该标准. ...

  4. H.264是什么?H.265是什么?视频码率是什么?了解视频原理

    一副1920x1080的画面有200万个像素,每个像素3个字节,意味着一帧要占用5.7MB的空间,理论上1秒60帧的视频占用342MB的空间,视频太大了,视频压缩也就有用了. 我们平时看到的视频都是经 ...

  5. H.264/MPEG-4:高质量视频数据流传播的视频多媒体数字信号编解码器(Video CODEC For High Quality Video Str

    H.264 和 MPEG-4 的第十部分,也叫做高级视频编码(AVC),是由 ITU 和 ISO 联合开发的. H.264/MPEG-4 支持视频压缩编码方式,或用于视频会议和视频电话.H.264 视 ...

  6. 数据压缩12 | 实验8 | H.264视频编解码

    目录 一.实验准备 1. H.264编码过程 2. 调试和编码(参考JM Reference Software Manual (JVT-AE010)) 3. 编码参数(参考JM Reference S ...

  7. 从0开始进入流媒体时代之--初识H.264

    前言 •mp4.flv.avi.rmvb.ts等格式是封装容器,里面封装的是视频流+音频流. •容器不会影响画面质量,影响质量的是容器里面封装的东西. •视频清晰度要素:一要看分辨率,二要看片源,三要 ...

  8. 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?...

    我通过引入下面三个概念来介绍视频压缩知识.分别是:视频文件格式(简称:文件格式),视频封装格式(简称:视频格式),视频编码方式(简称:视频编码) -- 一,视频文件格式(简称:文件格式):我们知道Wi ...

  9. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

最新文章

  1. 京东云默默搞了个操作系统,然后惊艳了一大片煤矿
  2. 【荐】CSS多级导航菜单
  3. shell基础:多命令顺序执行与管道符
  4. python连接sql数据库_python连接sql server数据库实现增删改查
  5. mysql call procedure into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量...
  6. 学习UpdatePanel控件
  7. 汉诺塔(三) 判断操作是否合法 + 栈(stack)数组
  8. fatal: unable to access ‘https://XXXXX‘: : OpenSSL SSL_read: Connection was reset, errno 10054……
  9. db2 导入数据_IBM BigInsights大数据迁移
  10. win查看GPU信息
  11. 电路中的输入输出阻抗以及阻抗匹配
  12. 中科矿业带你走进SWARM/BZZ,选择去或留?
  13. 如何创建管道——pipe
  14. 北京中医药大学《计算机基础》平时作业1
  15. 葵花宝典第一招:唐氏均线成交量参数
  16. word中使用mathtype编辑公式并添加序号
  17. Java生成指定范围的随机数
  18. 为什么你写了一万小时的代码,却没能成为架构师?
  19. 怎么设计好链游的经济模型?先看看传统游戏是如何抑制通货膨胀问题的
  20. C#.NET 国密SM4加密解密 CBC ECB 2种模式

热门文章

  1. monodepth-pytorch代码实现学习笔记(一)
  2. 12306与抢票插件初识
  3. {渡一教育}成哥HTML课程干货笔记整--2
  4. 三维声技术在赛事直播中的应用,TWS耳机中音频技术落地实践,通话降噪算法落地应用及挑战...
  5. 最新现实美女照片大集合
  6. NVIDIA-Jetson Nano SD卡扩容脚本
  7. 透明设置Android:将activity设置为弹出式的并设置为透明的
  8. 5m 云服务器2核4g_2核4g云服务器(2核4g的云服务器能干什么)
  9. Linux预科笔记(一)
  10. 第四届橙瓜网络文学奖暨见证·网络文学20年作家评选正式开启,千人评委会隆重见证