- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[转]手机视频文件格式解析之 3GP/MP4
2010-06-03 13:39
作者: k歌之王????? 2009-08-23
前言:做完了手机全能播放器的项目, 又要告别几个月来并肩作战,即将去北京发展的Manager zhu。准备把
做过的3GP/FLV/AVI格式整理一遍, 算是对几个月辛苦成果的总结, 也为后来者提供一些参考。
1. 概述
流行的文件格式背后都有大公司的支持。FLV得益于ADOBE公司推动的网络视频分享风潮,而AVI则是MICROSOFT首创的RIFF即视频和音频交织在一起同步播放。 3GP/MP4是APPLE提出并得到ISO标准支持作为NOKIA等手机的默认视频格式。3GP是MP4格式在手机上的简化版。MP4的codec组合一般是mpeg4 + AAC, 3GP则按版本演进分为3gpp r5(h.263/mpeg4 + AMR-NB/AMR WB), 3gpp r6(增加h.264视频和aacPlus音频支持)。
有人会把MP4和MPEG4搞混, 前者是文件容器(container),后者是视频编码格式, 容器的作用是把压缩编码
后的视频和音频数据尽可能紧凑的排布,就好像阿甘的巧克力盒子,你并不知道盒子里有什么, 但你可以按照
既定的线索解开文件,取出你需要的数据。
文件格式一般包括以下三要素:
header: 标记文件类型,音视频码流的基本属性信息index:??? 索引表,每个frame有对应的offset,size,timestamp.stream: 真正的音视频流数据。任何文件格式都应该有以上3要素。 当然AVI视频没有索引也能播放,但不能拖放seek,需要自己重建索引。解
析器(demuxer)根据frame_id找到其在文件中的offset和size,然后读取出来解码并播放。
2. 文件格式分析
下面来分析一下3GP/MP4文件格式。APPLE的格式有2个特点,1. 排布紧凑几乎没有冗余数据(AVI则有很多junk
数据),2.音视频码流数据可随意存放而不需按时间顺序排布。
3gp文件由一系列的box(atom)组成。每个box的结构都是4字节的size,4字节的type, 还有一些data数据。用
mp4info查看3gp文件的数据排布如下图:
如上图, ftyp是表示文件的版本信息, mdat存放文字,音视频等数据。你可能要问,这些音视频数据怎么找
到呢? 是通过moov box里的子box trak,里面存放着音视频的属性描述以及每个sample的索引。
3. 关于sample atoms
?? video和audio的码流属性(如视频width/height,codec id, 音频采样率声道数等)存放在stsd box里; 下面
着重介绍MP4高效压缩的精华:stts,stss,stsc,stsz,stco五个box。对比AVI的索引表是每个sample都有对应的
id,flag,offset,size,3GP的高效索引方式可以把AVI转码成同码率的MP4后,文件size减小成原来的20-30%!
1. stts atom(time to sample atoms,见quicktime format 文档图2-28 标准文档点击下载): 存储了sample
的时间信息。stts能让很方便的根据timestamp找到对应的sample,或者获取某个sample对应的timestamp. stts
table记录着有相同duration的sample的数量count和时长dutation。
2. stss atom(sync sample atom,见文档图2-31): 存储了每个关键帧的sample id。 stss能让你很方便的找到
当前帧最近的关键帧。
3. stsc atom(sample to chunk atom): sample存放在chunk里为了允许优化的数据读取。比如音频sample size
都很小(amr-nb sample size为32字节), 每次读取一个sample开销太大, 可一次性读所在chunk里一堆
sample。
4. stsz atom(sample size atom): stsz可以描述每个sample的size.
5. stco atom(chunk offset atoms): stco描述了每个chunk在文件中的绝对偏移位置。该offset可以是32位的
也可以是64位的,后者用来支持处理超大文件。
4 .使用sample atoms来处理播放流程
查找sample????????
1.确定时间,相对于媒体时间坐标系统
2.检查time-to-sample atom来确定给定时间的sample序号。
3.检查sampl
文档评论(0)