mp4格式

下面的软件下载地址:http://download.csdn.net/source/2607382

MP4格式缩率图

ftyp:

 这是一个筐,可以装mdat等其他Box 

例:00 00 00 14 66 74 79 70 69 73 6F 6D 00 00 02 00 6D 70 34 31
 语义为:ftyp: Major brand: isom
  Minor version: 512
  Compatible brand: mp41
free|skip
 
空白Box.装在ftyp等筐里
 
例:00 00 00 08 66 72 65
 
语意为: free: (null)

moov:

 这是一个筐,里面很丰富
 
例:00 00 07 63 6D 6F 6F 76
 
本身属性没有。但后面全是它的内容

moov:mvhd:

 这是moovheader.
 
例: 00 00 00 6C 6D 76 68 64 00 00 00 00 7C 25 B0 80
  7C 25 B0 80 00 00 03 E8 00 00 06 14 00 01 00 00
  01 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
  00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
  00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  00 00 00 00 00 00 00 00 00 00 00 03   
        

 语义:
 creation_time:2082844800       modification_time:2082844800   
 timescale:1000 //
一秒分多少份,这里1000表示时间单位为1毫秒,这个设置很重要
 duration:1556 rate:10000
表示1.0 volume:100 表示最大声
 reserved:0  reserved[0]:0   reserved[1]:0   
 Matric[0]:10000  Matric[1]:0  Matric[2]:0  Matric[3]:0  Matric[4]:10000 
 Matric[5]:0
 Matric[6]:0  Matric[7]:0  Matric[8]:40000000
 Predefined[0]:0  Predefined[1]:0  Predefined[2]:0  Predefined[3]:0
 Predefined[4]:0  Predefined[5]:0  next_track_ID:3

 

moov:trak: tkhd:

 这是track header
 
1 00 00 00 5C 74 6B 68 64 00 00 00 0F 7C 25 B0 80
  7C 25 B0 80 00 00 00 01 00 00 00 00 00 00 06 08
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  40 00 00 00 02 40 00 00 01 E0 00 00     
       
 
语义:
 creation_time:2082844800     modification_time:2082844800   
 track_ID:1
 第一轨index, 这个值很重要, 直接决定了视频和音频是否能同时出现, 如果音频和视频的track_ID都是1, 则会导致播放器无法播放.
 reserved_1:0  
 duration:1544 //
这个值对播放器很重要, 具体时间还和mvhdtimescale相关,用来指定了时长,1544个时间单位,如果是毫秒为单位,则为1544毫秒,
 volume:0
 //这是视频轨,无音响 reserved_2[0]:0     reserved_2[1]:0        
 layer:0 //
由于我们的视频只有一层,所以这里总是0
 alternate_group:0 reserved_3:0   
 Matric[0]:10000    Matric[1]:0    Matric[2]:0    Matric[3]:0  Matric[4]:10000   
 Matric[5]:0    Matric[6]:0    Matric[7]:0    Matric[8]:40000000
 width:2400000 height:1e00000 //
这两个单位都要右移16位才靠谱

 2语义:
 creation_time:2082844800     modification_time:2082844800   
 track_ID:2 reserved_1:0 duration:1556 //
这个值对播放器很重要, 用来指定了时长,具体时间还和mvhdtimescale相关
 volume:100 //
这是音频轨,最大声 reserved_2[0]:0   reserved_2[1]:0        
 layer:0 //
只对视频有意义 alternate_group:0 //总是0
 reserved_3:0    Matric[0]:10000    Matric[1]:0    Matric[2]:0    Matric[3]:0
 Matric[4]:10000    Matric[5]:0    Matric[6]:0    Matric[7]:0    Matric[8]:40000000
 width:0 height:0

moov:trak: mdia:

 这个Box没有属性,是一个筐,装在trak

moov:trak: mdia: mdhd

 1:视频
 creation_time:2082844800   modification_time:2082844800   
 timescale:24000 //
这个位决定了播放的速度,不过他与duration的相乘后还是可以对应上面的mvhd设置
 duration:37037
 pad:0
 Language[0]:21      Language[1]:14      Language[2]:4
 pre_defined:0
 
 
2:声频
 creation_time:2082844800   modification_time:2082844800   
 timescale:44100 
 duration:68608
 pad:0 //
这个位无意义,是为了将后面language凑够16位之用
 Language[0]:21      Language[1]:14      Language[2]:4
 pre_defined:0

hdlr: handler
 
1:视频
 pre_defined:0 handler_type:vide //
似乎除了handler_type以外,其余的属性无意义
 reserved0      reserved:0      reserved:0

 2:声频
 pre_defined:0 handler_type:soun
 reserved:0      reserved:0      reserved:0

moov:trak: mdia: minf: vmhd

 Video media header
例: 
 graphicsmode:0 //Video
轨的合成模式,未知语义
 opcolor:0        opcolor:0        opcolor:0 //
同样未知

 

moov:trak: mdia: minf: dinf: dref

 Data referrence
 
例:
 entry_count:1 //
只有一条Entry
 url:  //
即使有也是没内容,测试文件无论音视都没有内容

 

moov:trak: mdia: minf: stbl: stsd

stsd: Sample Description box
 
这是一个table, 里面放有很多entry
 
例:entry_count:1 //视频,有一条entry

VisualSampleEntry: stsd里装的一条一条的视频entry,
 
例:
 data_reference_index:1
 pre_defined[0]:0
 pre_defined[1]:0 pre_defined[2]:0
 width:576 height:480
 horizresolution:480000 vertresolution:480000 //
常数,即72dpi
 reserved:0 frame_count:1   compressorname://

 depth:24 //
颜色深度
 pre_defined:-1

AudioSampleEntry: stsd里装的一条一条音频entry
 
例:reserved[0]:0            reserved[1]:0
 channelcount:2 samplesize:16
 pre_defined:0 reserved_2:0
 samplerate:ac440000 //
显然要右移16位才有意义

 

moov:trak: mdia: minf: stbl: stsd :mp4a

mp4a: aac box 这个box实际就是继承了audio sample entry box
 reserved[0]:0            reserved[1]:0
 channelcount:2 samplesize:16
 pre_defined:0 reserved_2:0 samplerate:56220000

 

moov:trak: mdia: minf: stbl: stsd : esds

esds: 包含在mp4a,
 length:3
 ES_ID:6400
 streamDependenceFlag:0
 URL_Flag=0  reserved=0
 streamPriority:1 streamDependenceFlag:0
 dependsOn_ES_ID:52685
 m_iData_Size:23 //data
的长度,算出来的
 Data[23] //
这里面有很一堆不知所云的数据, 一直到stts,但这堆数据极度重要,直接决定了解码器能否解码,14496-1里有定义
   //
实践证明: 这组数据与采样率有关,44100一组, 22050一组, 48000又是一组, 44100可以与48000共用一组

 

moov:trak: mdia: minf: stbl: stts

stts: Time to sample
 
1: 视频
 entry_count:1
 sample_count:37 //
上面已经有duration时间了,duration指整个mdatvideo的时长,这里37却为chunks数目
 sample_delta:1001 //1001 * 37=37037 sample_delta*sample_count=duration

 2: 音频
 sentry_count:1
 sample_count:67 //
音频分了67chunks
 sample_delta:1024 //
同上

 

moov:trak: mdia: minf: stbl: stss

stss: syn Sample box
 
1: 视频
 entry_count:1
 sample_number:1

 但音频里没有这个box,
 
这个Box非常重要, 决定了整个mp4文件是否可以拖拉, 如果这个box只有一个entry,则拖拉时将cpu达到100%, 如果这个box不存在, 可以拖拉, 也不会达到100%, 但是会略等一会, 通常做法可以搞100.

 

moov:trak: mdia: minf: stbl: stsc

stsc: Sample To Chunk Box 这个box非常重要,指示了在某一个chunk开始后面的chunks里每chunk有多少个sample, 一个sample就是一帧
 
1:视频 
 entry_count:1
 first chunk: 1, sample per chunk: 1, sample description index 1

 2:音频
 entry_count:1
 first chunk: 1, sample per chunk: 1, sample description index 1

 

moov:trak: mdia: minf: stbl: stsz

stsz: Sample Size Box, 这个box乃重中之重, 指示了每个sample的大小
 
1:视频
 sample size: 0         sample count: 37
 5127    855     830     2327    2742    2373    2716    2365    3061
 2170    1888    2427    2578    2218    2084    2138    2319    2586   
 2728    2322    3505    2624    1551    2725    2502    2072    1720   
 1382    2653    2177    1323    1492    1801    1765    1985    5028   
 3467
 
2:音频
 sample size: 0         sample count: 65
 219     205     207     182     213     194     195     194     212
 188     159     179     186     189     184     184     190     188
 190     186     195     196     182     197     182     186     182
 182     185     182     193     186     184     187     175     173
 170     185     171     181     178     178     185     192     188
 187     175     167     177     182     167     173     177     175
 176     174     170     168     169     180     164     167     176    
 170
 mdat Box
中被划分为很多个chunk,这里指出了每个chunk的大小.

 

moov:trak: mdia: minf: stbl: stco

stco: Chunk Offset Box,这也是最重要的box, 指示了每个chunk的开始位置
 
1: 视频
 entry_count:37
 0x24 0x15d3  0x1aaf  0x1f84  0x2a20  0x35aa  0x404a  0x4c53  0x5705
 0x6470  0x6da6  0x767c  0x8174  0x8d00  0x9725  0xa003  0xa9c9  0xb447 
 0xbfdc 0xcbf7  0xd5b8  0xe4c0  0xf064  0xf7da  0x103ea 0x10e70 0x117ff
 0x1200d 0x126da 0x1328b 0x13bbd 0x14247 0x14973 0x151cd 0x15a0a 0x16272
 0x17770
 
 
2:音频
 entry_count:65
 0x142b 0x1506  0x192a  0x19f9  0x1ded  0x1ec2  0x289b  0x295e
 0x34d6  0x3eef  0x3fab  0x4ae6  0x4b99  0x5590  0x564d  0x62fa 
 0x63b2  0x6cea 0x7506  0x75be  0x7ff7  0x80b1  0x8b86  0x8c4a 
 0x95aa  0x966f  0x9f49  0xa85d 0xa913  0xb2d8  0xb391  0xbe61 
 0xbf22  0xca84  0xcb3c  0xd509  0xe369  0xe416 0xef00  0xefb9 
 0xf673  0xf728  0x1027f 0x10331 0x10db0 0x11688 0x11744 0x11eb7
 0x11f66 0x12573 0x12624 0x13137 0x131de 0x13b0c 0x140e8 0x14197
 0x1481b 0x148c9 0x1507c 0x15124 0x158b2 0x15966 0x161cb 0x17616
 0x176c6

 

moov:trak: mdia: minf: stbl: smhd

smhd: sound media header
 
:
 balance:0 reserved:0
 
暂时未知语义
 

avcC: AVC descriptor box

avcC: AVC descriptor box非常重要, SPS PPS 都放这 在14496-15定义
 
:
 configurationVersion:1  AVCProfileIndication:66
 profile_compatibility:192 AVCLevelIndication;31
 reserved_1:63  lengthSizeMinusOne:3
 reserved_2:7
 numOfSequenceParameterSets:1 numOfPictureParameterSets:1
 SPS length: 24 //
第一个SPS的长度, 多个SPS可以继续往下
 PPS length: 4 //
第一个PPS的长度, 多个PPS可以继续往下

 

 

 

aligned(8) class AVCDecoderConfigurationRecord { 

 unsigned int(8) configurationVersion = 1; 

 unsigned int(8) AVCProfileIndication; 

 unsigned int(8) profile_compatibility; 

 unsigned int(8) AVCLevelIndication;  

 bit(6) reserved = ‘111111’b;

 unsigned int(2) lengthSizeMinusOne;  

 bit(3) reserved = ‘111’b;

 unsigned int(5) numOfSequenceParameterSets; 

 for (i=0; i< numOfSequenceParameterSets;  i++) { 

  unsigned int(16) sequenceParameterSetLength ; 

  bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit; 

 } 

 unsigned int(8) numOfPictureParameterSets; 

 for (i=0; i< numOfPictureParameterSets;  i++) { 

  unsigned int(16) pictureParameterSetLength; 

  bit(8*pictureParameterSetLength) pictureParameterSetNALUnit; 

 } 

}

http://www.nhzjj.com/asp/admin/editor/newsfile/201011314552121.pdf

btrt: bit rate box

btrt: bit rate box
 bufferSizeDB:7858 //
告诉decoder开辟缓冲区大小?
 maxBitrate:413432 //
最大Bit rate
 avgBitrate:371960 //
平均Bit rate

 

 avc1

 class AVCSampleEntry() extends VisualSampleEntry (‘avc1’){

 AVCConfigurationBox config; 

 MPEG4BitRateBox ();      // optional 

 MPEG4ExtensionDescriptorsBox (); // optional 

}

 

 

class AVCConfigurationBox extends Box(‘avcC’) { 

 AVCDecoderConfigurationRecord() AVCConfig; 

}

 

 

class MPEG4BitRateBox extends Box(‘btrt’){

 unsigned int(32) bufferSizeDB; 

 unsigned int(32) maxBitrate; 

 unsigned int(32) avgBitrate; 

}

 

 

class MPEG4ExtensionDescriptorsBox extends Box(‘m4ds’) { 

 Descriptor Descr[0 .. 255]; 

}

 

 

 



Trouble shooting
1,
播放速度不正常, 哪个参数可调?
 mdhd->timescale,
数字越大, 则播放速度越快
 
2,
拖拉不正常, 哪个Box可调?
 stss,
如果只有一条entry, 则拖拉会产生cpu 100%的情况. 如果没有entry, 则拖拉会略有停顿
3,
音频,视频分别整合成mp4文件可以播放, 但音频,视频都整合进mp4文件以后就无法播放.
 trak->track_id,
两轨可能都用同一ID, 则不成. 视频为1, 音频为2,则可以解决这个问题

其实以上文章只是个简单的翻译,详细的文档可参考:

ISO_IEC14496-12_2005(E)

Information technology — Coding of
audio-visual objects —
Part 12:
ISO base media file format
Technologies de l'information — Codage des objets audiovisuels —
Partie 12: Format ISO de base pour les fichiers médias


ISO_IEC14496-14_2003(E)

Information technology — Coding of
audio-visual objects —
Part 14:
MP4 file format
Technologies de l'information — Codage des objets audiovisuels —
Partie 14: Format de fichier MP4

网上比较难于下载到,有需要的朋友可以email:wguizhou2008@gmail.com 找我索要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB的快速手动安装

就是关于MongoDB主从库的安装配置和启动。网上关于MongoDB的安装有大量的文章供大家学习。我这里提供一个Windows环境下MongoDB主从库的快速手动安装的方法&#xff0c;只需要三步即可。 先下载的安装包&#xff0c;解压缩后找到bin文件夹&#xff0c;将bin文件夹拷贝至你自己的…

时序图 分支_UML用例图

UML用例图用例图有以下东东:用例参与者关联系统边界用例使用椭圆来表示&#xff0c;椭圆里边写上用例的名称:这里的用例可以理解为一个动作或行为,或者一个对象。参与者用一个小人儿,在小人儿下面写上参与者名称,例如学生:关联用一条线表示:把很多个用例放到一个大的矩形框里。…

自定义封装 banner 组件

1. 效果图预览 2.基本功能 一个简单方便的轮播图组件&#xff0c;基于viewpager 基础上进行的封装。可设置 项目中图片&#xff0c;网络图片&#xff0c; View&#xff1b;支持循环自动播放&#xff0c;手势滑动切换&#xff0c;item点击事件,可设置 点点的样式宽高、颜色、大小…

vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...

最近在跑实验&#xff0c;但是突然发现程序运行变慢&#xff0c;然后top命令查看程序运行情况&#xff0c;发现有异常进程&#xff0c;名字叫 bash&#xff0c;占用 2400% CPU计算资源。刚开始怀疑是挖矿程序&#xff0c;因实验室网络IP为教育网公网&#xff0c;怀疑被攻击&…

3gp文件格式研究 (转windcao的专栏)

序言 06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下,我终于有了第一份关于3gp文件格式的文档《ISO/IEC 14496-12&#xff0c;ISO媒体文件格式》.在此真心感谢luxh的贡献.当然了是英文版的,有文档就不错了.为了便于查阅和理解,我把之后陆续找…

yarn 怎么查看有多个job在跑_flink on yarn 模式下提示yarn资源不足问题分析

背景在实时计算平台上通过YarnClient向yarn上提交flink任务时一直卡在那里&#xff0c;并在client端一直输出如下日志&#xff1a;(YarnClusterDescriptor.java:1036)- Deployment took more than 60 seconds. Please check if the requested resources are available in the Y…

MPEG-2TS码流编辑的原理及其应用(转载

[作者&#xff1a;辽宁电视台 赵季伟] 在当今数字媒体不断发展、新媒体业务不断涌现 的前提下&#xff0c;实践证明襁褓中的新媒体只有两种经营方略可供选择&#xff1a;或是购买并集成整套节目&#xff0c;或是低成本深加工新节目&#xff0c;再不可能去按照传统生产模式…

FLV文件格式(Z)(转载)

刚才在看一些关于demux的东西&#xff0c;在处理flv格式的文件的时候&#xff0c;由于自己对flv文件的格式不了解&#xff0c;所以就比较云头转向&#xff0c;正好看到了一篇讲述flv文件格式的文章&#xff0c;写的比较明白&#xff0c;所以就转过来了。O(∩_∩)O~flv头文件比较…

mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)详解

一、innodb的read-ahead是什么&#xff1a; 所谓的read-ahead就是innodb根据你现在访问的数据&#xff0c;推测出你接下来可能要访问的数据&#xff0c;并把它们(可能要访问的数据)读入 内存。 二、read-ahead是怎么做到的&#xff1a; 1、总的来说read-ahead利用的是程序的局部…

mp4文件格式解析(一)

原文地址&#xff1a;mp4文件格式解析&#xff08;一&#xff09;作者&#xff1a;可下人间目前MP4的概念被炒得很火&#xff0c;也很乱。最开始MP4指的是音频&#xff08;MP3的升级版&#xff09;&#xff0c;即MPEG-2 AAC标准。随后MP4概念被转移到视频上&#xff0c;对应的是…

shiro身份验证测试

2019独角兽企业重金招聘Python工程师标准>>> 一、登录验证 1、首先在shiro.ini里准备一些用户身份/凭据&#xff0c;后面这里会使用数据库代替&#xff0c;如&#xff1a; [users] [main] #realm jdbcRealmcom.learnging.system.shiro.ShiroRealm securityManager…

shell if多个条件判断_萌新关于Excel VBA中IF条件判断语句的一点心得体会

作者:金人瑞 《Excel VBA175例无理论纯实战教程》学员最近正在学习郑广学老师的VBA 175例教程&#xff0c;这是一篇新手向的文章&#xff0c;也是一个新手的总结&#xff0c;高手可以批评文章中的不足之处&#xff0c;也可以无视&#xff0c;VBA中的IF判断, 判断一般起到控制作…

编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...

点击上方蓝色文字关注我们吧谷歌排名第一的编程语言时什么&#xff1f;毫无疑问&#xff1a;肯定是 Python。 也难怪&#xff0c;作为大数据时代和人工智能时代的必备语言&#xff0c;Python 的优点太多了&#xff0c;语言简洁、易学、开发效率高、可移植性强...... 另外&#…

【转载】fullpage.js学习

参考网址&#xff1a;http://www.dowebok.com/77.html 上面有详细介绍及案例展示&#xff0c;很不错哦&#xff0c;可以先去看看demo 一、简介 fullPage.js 是一个基于jQuery的插件&#xff0c;它能够很方便、很轻松的制作出全屏网站&#xff0c;主要功能有&#xff1a; 1.支持…

webpack打包测试_webpack入门笔记(一)

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时&#xff0c;它会递归地构建一个依赖关系图(dependency graph)&#xff0c;其中包含应用程序需要的每个模块&#xff0c;然后将所有这些模块打包成一个或多个 bundle。webp…

mysql中的内置函数

mysql内置函数列表可以从mysql官方文档查询&#xff0c;这里仅分类简单介绍一些可能会用到的函数。 1 数学函数 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1间的浮点数&#xff0c;使用不同的seed N可以获得不同的随机数 round(x, D)&#xff…

使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)

摘要&#xff1a;首先这个Decorator解释一下这个单词&#xff1a;“装饰器”&#xff0c;我觉得其实可以这样理解&#xff0c;他就像我们用到的Frame&#xff0c;他把每个页面共有的东西提炼了出来&#xff0c;也可能我们也会用各种各样的include标签&#xff0c;将我们的常用页…

安卓开发 新浪微博share接口实现发带本地图片的微博

1.微博share接口 在开始之前&#xff0c;我们先看一下要用到的这个接口&#xff1a; 我们这次是要上传本地图片&#xff0c;可以很明确的知道&#xff0c;除了要用POST方式提交请求&#xff0c;还要采用multipart/form-data编码方式。 那么这个multipart/form-data编码方式是什…

VirtualBox安装Centos6.8出现——E_INVALIDARG (0x80070057)

VirtualBox使用已有的虚拟硬盘出错&#xff1a; 问题描述&#xff1a;UUID已经存在 Cannot register the hard disk E:\system_iso\centos6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9} because a hard disk E:\system_iso\centos68_02\centos6.8.vdi with UUID {05f096aa-6…

非线性动力学_非线性动力学特辑 低维到高维的联通者

序言&#xff1a; 本文将以维度为主线&#xff0c; 带量大家进入非线性动力学的世界。 文章数学部分不需要全部理解&#xff0c; 理解思维方法为主非线性动力学&#xff0c;是物理学的思维进入传统方法所不能解决的问题的一座丰碑。它可以帮助我们理解不同复杂度和时间空间尺度…