`
xpp02
  • 浏览: 1006704 次
社区版块
存档分类
最新评论

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

moov:trak: tkhd:

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

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

moov:trak: mdia:

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

moov:trak: mdia: mdhd

1:视频
creation_time:2082844800modification_time:2082844800
timescale:24000//
这个位决定了播放的速度,不过他与duration的相乘后还是可以对应上面的mvhd设置
duration:37037
pad:0
Language[0]:21Language[1]:14Language[2]:4
pre_defined:0

2:声频
creation_time:2082844800modification_time:2082844800
timescale:44100
duration:68608
pad:0//
这个位无意义,是为了将后面language凑够16位之用
Language[0]:21Language[1]:14Language[2]:4
pre_defined:0

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

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

moov:trak: mdia: minf: vmhd

Video media header
例:
graphicsmode:0//Video
轨的合成模式,未知语义
opcolor:0opcolor:0opcolor: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]:0pre_defined[2]:0
width:576 height:480
horizresolution:480000 vertresolution:480000//
常数,即72dpi
reserved:0 frame_count:1compressorname://

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

AudioSampleEntry: stsd里装的一条一条音频entry
例:reserved[0]:0reserved[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]:0reserved[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=0reserved=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: 0sample count: 37
5127855830232727422373271623653061
217018882427257822182084213823192586
272823223505262415512725250220721720
138226532177132314921801176519855028
3467
2:音频
sample size: 0sample count: 65
219205207182213194195194212
188159179186189184184190188
190186195196182197182186182
182185182193186184187175173
170185171181178178185192188
187175167177182167173177175
176174170168169180164167176
170
mdat Box
中被划分为很多个chunk,这里指出了每个chunk的大小.

moov:trak: mdia: minf: stbl: stco

stco: Chunk Offset Box,这也是最重要的box, 指示了每个chunk的开始位置
1: 视频
entry_count:37
0x240x15d30x1aaf0x1f840x2a200x35aa0x404a0x4c530x5705
0x64700x6da60x767c0x81740x8d000x97250xa0030xa9c90xb447
0xbfdc0xcbf70xd5b80xe4c00xf0640xf7da0x103ea 0x10e70 0x117ff
0x1200d 0x126da0x1328b 0x13bbd 0x14247 0x14973 0x151cd 0x15a0a 0x16272
0x17770

2:音频
entry_count:65
0x142b0x15060x192a0x19f90x1ded0x1ec20x289b0x295e
0x34d60x3eef0x3fab0x4ae60x4b990x55900x564d0x62fa
0x63b20x6cea0x75060x75be0x7ff70x80b10x8b860x8c4a
0x95aa0x966f0x9f490xa85d0xa9130xb2d80xb3910xbe61
0xbf220xca840xcb3c0xd5090xe3690xe4160xef000xefb9
0xf6730xf7280x1027f 0x10331 0x10db0 0x11688 0x11744 0x11eb7
0x11f66 0x12573 0x12624 0x13137 0x131de 0x13b0c 0x140e8 0x14197
0x1481b 0x148c90x1507c 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:1AVCProfileIndication:66
profile_compatibility:192AVCLevelIndication;31
reserved_1:63lengthSizeMinusOne: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 找我索要。

分享到:
评论

相关推荐

    mp4格式转换器免费下载 v10.7.rar

    mp4格式转换器-mp4视频格式转换器是一款mp4视频压缩转换软件。mp4格式转换器-mp4视频格式转换器具有转换速度快,支持批量转换,上手容易,操作简单易用等特点。支持将常用的RM转mp4、RMVB转mp4、MPG转mp4、AVI转mp4...

    Mp4格式文件解析C++

    解析mp4格式的文件,解析出每个box。C++语言,已在VS2010中编译通过。具体box里面的内容可根据个人需要添加代码来显示。

    监控专用MP4格式播放器

    监控专用MP4格式播放器,能打开监控录像

    MP4格式的解析库,能识别所有的MP4格式

    MP4格式容器的解析库,能识别所有的MP4容器。

    VC6下实现mp4格式文件转化为raw文件

    该软件可实现mp4格式文件到raw文件的转化,主要包括视频读取、播放、暂停,打开jpg文件、打开bmp图片,以及调整图像对比度及锐化等操作

    mp4格式转换器破解版.rar

    绿色版的MP4格式转换器, 不用安装,下载后解压到任意目录下,直接打开MP4.exe,再点击“退出”就可以使用了;软件介绍:MP4视频转换器采用了先进的MP4转换内核,内置解码编码文件,并且对不同类型的CPU进行了代码...

    mp4格式文件分析

    mp4格式文件分析描述了解析MP4文件的具体步骤,对mp4文件主要的box都有分析说明。

    swf格式文件f转mp4格式工具

    swf格式文件f转mp4格式工具

    【GStreamer】利用GStreamer实现mp4格式视频播放

    Linux平台C语言利用GStreamer实现mp4格式视频播放代码,包括管道配置,连接,以及动态连接element的pad。难点:demux控件通过回调方式进行音视频的分流,连接解码器、sink输出。

    MP4格式转换器v2.80绿色特别版

    MP4格式转换器是一款MP4格式转换软件,能将任意视频文件转换成手机和MP4播放器支持的MP4格式视频,以及高清MP4格式视频。有了MP4格式转换器,您可以随时在您的MP4播放器和手机上观看电影和视频。它支持将常用的RMVB...

    图片帧转换mp4格式视频.zip

    C# 图片帧转换mp4格式视频

    MP4格式转换器v2.7官方免费安装版

    MP4格式转换器是一款MP4格式转换软件,能将任意视频文件转换成手机和MP4播放器支持的MP4格式视频,以及高清MP4格式视频。有了MP4格式转换器,您可以随时在您的MP4播放器和手机上观看电影和视频。它支持将常用的RMVB...

    【格式转换python脚本】将avi格式转为mp4格式(可修改套用)

    可以将文件的格式转换为另一种格式,从而避免了下载各种商业软件。

    dat转mp4格式转换器中文版.rar

    可以将DAT格式视频文件直接转换为.mp4格式。从VCD光盘中复制的视频文件一般为DAT格式,通过这个能转换成MP4.转换后可以保持原来的品质不变。使用方法:启动软件点击添加文件,然后选择要转换的DAT文件,可以单独转换...

    视频qlv格式转换mp4格式

    视频下载的qlv格式视频转换mp4格式视频工具

    EV4视频格式转MP4格式(支持批量转换)

    EV4加密格式转MP4格式,可以批量转化

    Mp4视频文件格式分析工具

    附件内为两款现在最好的MP4格式分析工具:mp4info,mp4reader; 做视频相关工作必备工具;

    魔法mp4格式转换器软件v2.9.316中文官方安装版

    魔法mp4格式转换器软件支持各种流行视频格式转换输出mp4格式文件,针对目前各种智能手机和平板电脑专用的mp4视频格式,该软件在输出格式中提供了分类详细的选择,用户只需根据实际需求选择其中一种mp4格式使用即可,...

    狸窝MP4格式转换器 V4.2.0.0.zip

    狸窝MP4格式转换器是一款功能强大的MP4视频转换器,它可以将几乎所有流行的视频格式。如:RM、RMVB、VOB、DAT、VCD、DVD、SVCD、ASF、MOV、QT、MPEG、WMV、MP4、3GP、DivX、XviD、AVI等视频文件转换为MP4机、智能...

    蒲公英MP4格式转换器 v5.3.6.0.zip

    蒲公英MP4格式转换器是一款功能强大、操作简单的MP4、MPEG-4视频格式转换工具。 蒲公英MP4格式转换器功能介绍: 蒲公英MP4格式转换器软件可以帮助您将各种流行的视频格式转换为标准的MP4格式视频。这样您就可以在...

Global site tag (gtag.js) - Google Analytics