MP4数据封装格式
一 、MP4 https://blog.csdn.net/sdsszk/article/details/90719075
MP4 由很多个ATOM 嵌套构成,主要的ATOM包括 【ftyp】 【moov】【mdat】
ftyp在第一个, moov 和mdat顺序不固定,moov保存着视频播放的索引,
在线播放,moov必须在前面
部分摄像设备 moov-free-mdat
Atom结构:
1. ftype moov 和 mdat
ftype:
作用:确定文件的类型

MOOV
moov中主要保存了媒体的时间信息、trak信息和媒体索引等。
MDAT
所有媒体数据统一存放在mdat中

3. moov 结构

3.1 mvhd 时间长度
(1/1000)*70080 秒

3.2 track 视频索引
3.2.1 track->tkhd

3.2.2 moov-trak-mdia-hdlr track 类型 包括’vide’, ‘soun’和’hint’三种。

3.2.3 track 时间
moov-track-media-mdhd :

moov-trak-mdia-minf-stbl-stts中有媒体帧之间的时间间隔,单位是moov-trak-tkhd中的时间粒度。
3.2.4
moov-trak-mdia-minf-stbl比较重要,其中保存了解码器需要的信息和索引信息,以下Atom都是stbl Atom的孩子。
stsd中保存了解码器需要的媒体描述信息。
stss 标识媒体流中的关键帧

stts 数据帧之间的间隔

stco 每个数据Chunk在文件中的偏移

stsc给出各个数据Chunk中包含的数据帧。一个chunk可能会包含一个或者几个帧。每个chunk会有不同的size,每个chunk中的帧也会有不同的size。

stsz 样本大小

4 实际应用场景
1、把文件尾部的moov移到文件头
对于流媒体播放,如果mdat的位置在moov之前,通过流的方式播放文件会出现问题,因为没有办法在一开始就获得文件的媒体信息和索引。
这种情况需要对视频做预处理,把moov移动到文件头。通过遍历Atom可以很容易找到moov Atom。
需要注意的是,移动moov到文件头,同时需要修改moov中的stco/co64。因为这里保存了chunk数据的偏移量,移动moov后,需要根据moov的新位置更新stco/co64 。
2、分割MP4文件
在视频点播服务中,需要将MP4文件分割为多个分片,此时需要获取关键帧、切割时间轴、更新moov和生成各个分片文件。
可参考 http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html
MP4数据封装格式的更多相关文章
- 格式工厂转化成mp4 avc格式 暴风影音不能播放的解决方法
格式工厂转化成mp4 avc格式 暴风影音不能播放的解决方法 先转成其他mp4 确保能播放 然后再转成avc
- mp4封装格式各box类型讲解及IBP帧计算
mp4封装格式各box类型讲解及IBP帧计算 目录 mp4封装格式各box类型讲解及IBP帧计算 box ftyp box moov box mvhd box (Movie Header Box) t ...
- 网站上flv,MP4等格式的视频文件播放不出来的解决办法
在做一个网站时,发现视频文件,比如flv,MP4格式在本地可以正常的播放,但是传到了开发机器上,就不行了.播放器的文件地址是对的,就是一直没有反应. 经过长时间的实验,发现问题在与iis的设置问题.i ...
- 如何下载腾讯视频的视频转为MP4常用格式视频
想起之前看过中央一台的<我要上春晚>中有个节目叫<迎春花>,两个女孩表现特别好,想下载这个视频,然后发现CCTV提供的客户端不好用,腾讯视频有,但是腾讯视频下载下来是qlv格式 ...
- html中<video>显示视频的时候,MP4的格式问题
html支持的视频格式:HTML5视频 注意 浏览器对mp4 的编码方式要求的非常严格 视频编码必须是H.264 音频编码必须是: AAC
- FLV 数据封装格式
https://www.cnblogs.com/chyingp/p/flv-getting-started.html https://blog.csdn.net/ai2000ai/article/de ...
- php使用播放插件播放m3u8,mp4,flv格式的视频
一.这里我主要是播放m3u8的视频,有两款比较好的插件,swise和ckpalyer,我介绍的是ckplayer,这是在pc端播放的,并且是需要flash支持的,不过现在的最新浏览器都是默认安装的 二 ...
- ISO/IEC 15444-12 MP4 封装格式标准摘录 5
目录 Segments Segment Type Box Segment Index Box Subsegment Index Box Producer Reference Time Box Supp ...
- ISO/IEC 15444-12 MP4 封装格式标准摘录 4
目录 Movie Fragments Movie Extends Box Movie Extends Header Box Track Extends Box Movie Fragment Box M ...
随机推荐
- solidity语言介绍以及开发环境准备
solidity语言介绍以及开发环境准备 Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...
- ISO/IEC 9899:2011 条款6.5.17——逗号操作符
6.5.17 逗号操作符 语法 1.expression: assignment-expression expression , assignment-expression 语义 2.一个 ...
- 【Git】 Git安装及配置
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台. 本例使用环境:Linux环境(CentOS 7.4 ...
- iOS App Store网址的命名规则
App Store 命名规则:https://itunes.apple.com/cn/app/ + 拼音(最多6个,全部小写,空格要-) + /id +appID 一些参考实例: http:// ...
- C# WebClient 无法设置超时时间的解决办法
http://www.lenashane.com/article/20150624-1021.html
- [ kvm ] 学习笔记 7:KVM 虚拟机创建的几种方式
通过对 qemu-kvm.libvirt 的学习,总结三种创建虚拟机的方式: (1)通过 qemu-kvm 创建 (2)通过 virt-install 创建 (3)通过 virt-manager 创建 ...
- 修改config中的assemblyBinding
修改config中的assemblyBinding 未测试这段代码 private void SetRuntimeBinding(string path, string value) { XmlDoc ...
- Eclipse 常用配置和基本调试
常用配置 1.显示行号:window->Preferences->General->Editors->Text Editors , 勾选show line numbers 2. ...
- LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...
- IIS清理缓存
服务器突然断电经常会导致IIS中web项目运行不起来问题,各种报XXXX.dll加载失败,解决方法重新发布,如果重新发布也不行可能就是IIS缓存的问题了. 清理IIS缓存方法: 进入以下文件夹吧对应的 ...