MP4文件结构刨析
- 格式:doc
- 大小:61.00 KB
- 文档页数:4
mp3和mp4解压方式原理2000字MP3和MP4是两种常见的音视频文件格式,它们的解压方式和原理有所不同。
下面将详细介绍MP3和MP4的解压方式和原理。
一、MP3解压方式和原理MP3是一种音频编码格式,它通过压缩音频数据来减小文件大小,从而节省存储空间和传输带宽。
MP3的解压方式主要包括以下几个步骤:1.读取文件头部信息:MP3文件的开头部分包含了一些元数据,如音频采样率、声道数等信息。
解压时首先需要读取这些信息。
2.解析帧数据:MP3文件由一个个帧组成,每个帧包含了一定长度的音频数据。
解压时需要逐帧地解析帧数据。
3.解码音频数据:MP3文件中的音频数据经过了特定的编码算法,解压时需要将编码后的数据解码为原始的音频数据。
4.重建音频信号:解码后的音频数据是经过量化和压缩的,需要进行反量化和逆变换来还原出原始的音频信号。
MP3的解压原理主要基于人耳对声音的感知特性。
MP3格式利用了人耳对一些高频信号的较低敏感度,通过减少这些高频信号的数据量来实现压缩。
在解压时,通过一些复杂的算法来还原出原始的音频信号,以达到高音质的播放效果。
二、MP4解压方式和原理MP4是一种常见的视频文件格式,它不仅可以存储音频数据,还可以存储视频数据和其他多媒体数据。
MP4的解压方式主要包括以下几个步骤:1.解析文件结构:MP4文件的结构比较复杂,包含了多个轨道,每个轨道又包含了多个媒体样本。
解压时首先需要解析文件结构,确定需要解压的轨道和样本。
2.解析媒体样本:MP4文件中的媒体样本包括音频帧和视频帧,解压时需要逐帧地解析这些样本数据。
3.解码媒体数据:MP4文件中的音频和视频数据经过了特定的编码算法,解压时需要将编码后的数据解码为原始的音频和视频数据。
4.重建音视频信号:解码后的音频和视频数据是经过压缩的,需要进行一系列的处理步骤来还原出原始的音视频信号,包括去压缩、去块效应等处理。
MP4的解压原理主要是基于视频编码和音频编码技术。
mp4中的 chunk划分标准
MP4(MPEG-4 Part 14)是一种常见的多媒体文件格式,它使用一种称为"chunk"的数据结构来存储音频、视频和其他媒体数据。
在MP4文件中,chunk通常被称为"box",每个box包含特定类型的数据,并且有自己的长度和类型标识。
MP4文件中的chunk划分标准可以从多个角度来解释。
首先,可以从文件结构的角度来看,MP4文件由一个个box组成,每个box 包含不同类型的数据,例如视频轨道、音频轨道、文本数据等。
这些box按照特定的顺序排列,以便播放器能够正确解析和播放其中的媒体数据。
另外,从媒体数据的角度来看,视频和音频数据通常被划分为一系列连续的chunk,每个chunk包含一小段时间内的数据。
这种划分标准可以帮助播放器在播放时快速定位和解析特定时间段内的媒体数据,以实现流畅的播放效果。
此外,从技术规范的角度来看,MP4文件格式有一些特定的规范和标准,用来定义chunk的结构、类型和用途。
例如,ISO/IEC 14496-12标准规定了MP4文件中box的结构和使用方法,这些规范
对于理解和解析MP4文件中的chunk非常重要。
总的来说,MP4文件中的chunk划分标准涉及文件结构、媒体数据和技术规范等多个方面,这些标准和规范共同构成了MP4文件格式的基础,确保了不同设备和软件之间的兼容性和互操作性。
mp4原理MP4原理。
MP4是一种非常常见的视频文件格式,它广泛应用于各种设备和平台上。
那么,MP4是如何工作的呢?接下来,我们将深入探讨MP4的原理。
首先,我们需要了解MP4的基本结构。
MP4文件是由多个不同类型的数据块组成的。
这些数据块包括视频、音频、文本、元数据等。
MP4文件的结构由头部、媒体数据和索引组成。
头部包含了文件的基本信息,媒体数据包含了实际的音视频内容,索引则用于快速定位和访问媒体数据。
MP4文件中的视频数据通常使用H.264或者MPEG-4 Part 2这样的编码格式。
这些编码格式可以将视频数据压缩成较小的体积,同时保持较高的画质。
音频数据则可以使用AAC或者MP3这样的格式进行压缩。
这些压缩技术使得MP4文件可以在较小的文件大小下存储高质量的音视频内容。
MP4文件的播放原理也非常简单。
当我们打开一个MP4文件时,播放器会首先读取文件头部的信息,获取文件的基本参数和结构。
然后,播放器会根据索引信息来定位和读取媒体数据。
视频数据会经过解码器解码成图像,音频数据则会经过解码器解码成声音。
最终,播放器会将解码后的音视频数据进行同步播放,呈现给用户。
除了基本的音视频数据外,MP4文件还可以包含一些附加的元数据。
这些元数据可以包括视频的标题、描述、封面图片等信息。
这些信息可以帮助用户更好地了解和管理文件内容。
在移动设备和网络传输中,MP4文件还可以采用流式传输的方式进行播放。
这意味着文件可以边下载边播放,无需等待整个文件下载完成。
这种方式可以极大地提高用户的观看体验,特别是在网络条件较差的情况下。
总的来说,MP4文件作为一种通用的音视频文件格式,具有较高的压缩比和良好的播放兼容性。
它的原理简单而有效,使得用户可以方便地在各种设备和平台上播放和分享音视频内容。
希望通过本文的介绍,您对MP4文件的原理有了更深入的了解。
MP4作为一种通用的音视频文件格式,其原理和工作方式对我们理解和使用多媒体文件都具有重要意义。
目录1.引言 (1)2.MP4中一些概念详解 (1)3.MP4文件结构分析 (1)3.1box结构 (1)3.2MP4总体结构 (2)3.3Movie box(moov) (3)3.3.1Movie Header box(mvhd) (3)3.3.2Trak box (4)3.4Media box (6)3.4.1Media header box(mdhd) (6)3.4.2Hdlr box (7)3.4.3Minf box (7)3.5Sample Table Box(stbl) (8)3.5.1Sample Description Box(stsd) (8)3.5.2Time To Sample Box(stts) (8)3.5.3Sample Size Box(stsz) (8)3.5.4Sample To Chunk Box(stsc) (8)3.5.5Sync Sample Box(stss) (9)3.5.6Chunk Offset Box(stco) (9)MP4文件格式解析总结1.引言MP4是一种常见的多媒体容器格式,对应MPEG-4标准,这种容器格式非常全面开放,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都可以。
在MP4文件中,媒体的描述信息与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列。
同时,MP4也支持流媒体,MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。
MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式。
2.MP4中一些概念详解MP4文件格式中,所有的内容存在一个称为movie的容器中。
一个movie可以由多个tracks组成。
每个track就是一个随时间变化的媒体序列,track里的每个时间单位是一个sample,它可以是一帧视频,或者一段连续的压缩音频。
sample按照时间顺序排列。
mp4 reader 解析
MP4 Reader 解析是指对 MP4 文件进行读取和解析的过程。
MP4 (MPEG-4 Part 14) 是一种常见的多媒体文件格式,它通常
用于存储视频、音频和字幕数据。
进行 MP4 文件解析的目的
是能够提取出其中的视频和音频数据,并对其进行进一步的处理或播放。
MP4 Reader 解析一般涉及以下内容:
1. 文件头解析:读取 MP4 文件的文件头部分,包括文件格式
标识、版本号、文件大小等信息。
2. Box 解析:MP4 文件使用 Box 结构来组织数据,一个 Box
包含一个四字节的类型标识和一个长度字段,然后是实际的数据。
MP4 Reader 解析会按顺序读取各个 Box,识别其类型并
解析对应的数据。
3. 媒体数据解析:对于包含视频和音频的 MP4 文件,解析过
程会进一步解析对应的媒体数据。
视频数据通常采用 H.264 或H.265 等压缩格式,需要按照相应的解码规则进行解析和解码。
音频数据通常使用 AAC 或 MP3 等格式,也需要进行相应的
解析和解码。
通过 MP4 Reader 解析,可以获取到视频的帧数据、音频的采
样数据等,进而进行如视频播放、媒体编辑、转码等操作。
同时,MP4 Reader 解析还能够获取到一些相关的元数据,例如
视频的分辨率、帧率,音频的采样率、声道数等信息,以供后续处理使用。
mp4原理MP4是一种常见的视频文件格式,它基于MPEG-4视频编解码器标准,并且与音频文件格式M4A共享相同的基础结构。
MP4文件将视频、音频和文本数据以及其他媒体流组合在一个容器中,使其可以同时播放这些不同类型的数据。
MP4文件的结构可以被视为一个盒子,每个盒子都有自己的盒子类型标识。
盒子中的数据按照特定的格式进行存储和编码。
以下是MP4文件常见的盒子类型:1. ftyp(文件类型标识)盒子:定义MP4文件的版本和类型。
2. moov(电影)盒子:包含文件的描述信息,包括视频和音频的元数据,如分辨率、编码格式、时长等。
moov盒子还包含了traks(轨道)盒子,每个轨道对应一个媒体流。
3. trak(轨道)盒子:包含单个媒体流的描述信息。
4. mdia(媒体)盒子:包含单个媒体流的数据。
5. minf(媒体信息)盒子:包含媒体流的详细信息,如编码参数、采样率等。
6. stbl(采样表)盒子:包含媒体流的实际数据,如视频帧、音频采样等。
7. mdat(媒体数据)盒子:存储实际的媒体流数据。
MP4文件的播放过程如下:1. 解析MP4文件的结构,获取文件的描述信息(moov盒子)以及媒体流的信息(trak盒子)。
2. 根据描述信息,解码媒体流的数据格式和参数。
3. 将解码后的媒体流数据渲染到屏幕上,播放音频和视频。
4. 不断重复步骤3,直至播放完整个媒体流。
总的来说,MP4文件是一种将视频、音频和文本数据组合在一起的容器格式。
它通过盒子的方式存储和编码数据,通过解析和解码来实现媒体的播放。
在播放过程中,MP4文件的结构和描述信息被用来解析媒体流的数据格式和参数,然后通过渲染将媒体流数据展示给用户。
MP4⽂件格式的解析,以及MP4⽂件的分割算法MP4⽂件格式的解析,以及MP4⽂件的分割算法 mp4应该算是⼀种⽐较复杂的媒体格式了,起源于QuickTime。
以前研究的时候就花了⼀番的功夫,尤其是如何把它完美的融⼊到视频点播应⽤中,更是费尽了⼼思,主要问题是处理mp4⽂件庞⼤的“媒体头”。
当然,流媒体点播也可以采⽤flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,⼈家说毕竟mp4才是H.264最佳的存储格式嘛。
这⼏天整理并重构了⼀下mp4⽂件的解析程序,融合了分解与合并的程序,以前是c语⾔写的,应⽤在linux上运⾏的服务器程序上,现在改成c++,⽅便我在其他项⽬中使⽤它,⾄于⽤不⽤移植⼀份c#的,暂时⽤不到,等有必要了再说吧。
这篇⽂章先简单介绍⼀下mp4⽂件的⼤体结构,以及它的分割算法,之后再写⽂章介绍如何把mp4完美应⽤在点播项⽬中。
⼀、MP4格式分析 MP4(MPEG-4 Part 14)是⼀种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准⽂件中定义的,属于MPEG-4的⼀部分,是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”标准中所定义的媒体格式的⼀种实现,后者定义了⼀种通⽤的媒体⽂件结构标准。
MP4是⼀种描述较为全⾯的容器格式,被认为可以在其中嵌⼊任何形式的数据,各种编码的视频、⾳频等都不在话下,不过我们常见的⼤部分的MP4⽂件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的⾳频。
MP4格式的官⽅⽂件后缀名是“.mp4”,还有其他的以mp4为基础进⾏的扩展或者是缩⽔版本的格式,包括:M4V, 3GP, F4V等。
mp4是由⼀个个“box”组成的,⼤box中存放⼩box,⼀级嵌套⼀级来存放媒体信息。
box的基本结构是: 其中,size指明了整个box所占⽤的⼤⼩,包括header部分。
MP4文件格式详解——结构概述一、基本概念1、文件,由许多Box和FullBox组成。
2、 Box,每个Box由Header和Data组成。
3、 FullBox,是Box的扩展,Box结构的基础上在Header中增加8bits version和24bits flags。
4、 Header,包含了整个Box的长度size和类型type。
当size==0时,代表这是文件中最后一个Box;当size==1时,意味着Box长度需要更多bits来描述,在后面会定义一个64bits的largesize 描述Box的长度;当type是uuid时,代表Box中的数据是用户自定义扩展类型。
5、 Data,是Box的实际数据,可以是纯数据也可以是更多的子Boxes。
6、当一个Box的Data中是一系列子Box时,这个Box又可成为Container Box。
Box的结构用伪代码表示如下:[cpp] view plaincopyprint?1.aligned(8) class Box (unsigned int(32) boxtype,optional u nsigned int(8)[16] extended_type)2.{3.unsigned int(32) size;4.unsigned int(32) type = boxtype;5.if (size==1)6.{7.unsigned int(64) largesize;8.}9.else if (size==0)10.{11.// box extends to end of file12.}13.if (boxtype==‘uuid’)14.{15.unsigned int(8)[16] usertype = extended_type;16.}结构如下图:文件基本结构描述图二、MP4文件格式(ISO-14496-12/14)MP4文件概述MP4文件就是由各式各样的Box组成的,下表中列出了所有必选或可选的Box类型,√代表Box必选。
5分钟⼊门MP4⽂件格式本⽂主要内容包括,什么是MP4、MP4⽂件的基本结构、Box的基本结构、常见且重要的box介绍、普通MP4与fMP4的区别、如何通过代码解析MP4⽂件等。
写作背景:最近经常回答团队⼩伙伴关于直播 & 短视频的问题,⽐如 “flv.js的实现原理”、“为什么设计同学给的mp4⽂件浏览器⾥播放不了、但本地可以正常播放”、“MP4兼容性很好,可不可以⽤来做直播” 等。
在解答的过程中,发现经常涉及 MP4 协议的介绍。
之前这块有简单了解过并做了笔记,这⾥稍微整理⼀下,顺便作为团队参考⽂档,如有错漏,敬请指出。
⾸先,介绍下封装格式。
多媒体封装格式(也叫容器格式),是指按照⼀定的规则,将视频数据、⾳频数据等,放到⼀个⽂件中。
常见的MKV、AVI 以及本⽂介绍的 MP4 等,都是封装格式。
MP4是最常见的封装格式之⼀,因为其跨平台的特性⽽得到⼴泛应⽤。
MP4⽂件的后缀为.mp4,基本上主流的播放器、浏览器都⽀持MP4格式。
MP4⽂件的格式主要由 MPEG-4 Part 12、MPEG-4 Part 14 两部分进⾏定义。
其中,MPEG-4 Part 12 定义了ISO基础媒体⽂件格式,⽤来存储基于时间的媒体内容。
MPEG-4 Part 14 实际定义了MP4⽂件格式,在MPEG-4 Part 12的基础上进⾏扩展。
对从事直播、⾳视频相关⼯作的同学,很有必要了解MP4格式,下⾯简单介绍下。
MP4⽂件由多个box组成,每个box存储不同的信息,且box之间是树状结构,如下图所⽰。
box类型有很多,下⾯是3个⽐较重要的顶层box:ftyp:File Type Box,描述⽂件遵从的MP4规范与版本;moov:Movie Box,媒体的metadata信息,有且仅有⼀个。
mdat:Media Data Box,存放实际的媒体数据,⼀般有多个;虽然box类型有很多,但基本结构都是⼀样的。
多媒体⽂件格式(⼀):MP4格式在互联⽹常见的格式中,跨平台最好的应该就属MP4⽂件了。
因为MP4⽂件既可以在PC平台的Flashplayer中播放,⼜可以在移动平台的Android、iOS等平台中进⾏播放,⽽且使⽤系统默认的播放器即可以播放。
MP4格式是最常见的多媒体⽂件格式。
⼀、MP4 格式标准介绍MP4格式标准为ISO-14496 Part 12、ISO-14496 Part 14,标准内容不是很多,下⾯我们来介绍⼀下格式标准中⼀些重要的信息。
MP4是⼀种描述较为全⾯的容器格式,被认为可以在其中嵌⼊任何形式的数据,各种编码的视频、⾳频等都不在话下,常见的⼤部分的MP4⽂件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的⾳频。
MP4格式的官⽅⽂件后缀名是“.mp4”,还有其他的以mp4为基础进⾏的扩展或者是阉割版的格式,如:M4V, 3GP, F4V等。
MP4是由⼀个个“Box”组成的,⼤Box中存放⼩Box,⼀级嵌套⼀级来存放媒体信息。
下⾯我们来楚关于Box的⼏个概念:MP4⽂件由许多个Box与FullBox组成。
每个Box由Header和Data两部分组成。
FullBox是Box的扩展,其在Box结构的基础上,在Header中增加8位version标志和24的flags标志。
Header包含了整个Box的长度的⼤⼩(size)和类型(type),当size等于0时,代表这个Box是⽂件的最后⼀个Box。
当size等于1时,说明Box长度需要更多的位来描述,在后⾯会⾃定义⼀个64位的largesize⽤来描述Box的长度。
当type等于uuid时,说明这个Box 中的数据是⽤户⾃定义扩展类型。
Data为Box的实际数据,可以是纯数据,也可以是更多的⼦Box。
当⼀个Box中Data是⼀系列的⼦Box时,这个Box⼜可以称为Container(容器)Box。
介绍了MP4的格式标准后,下⾯我们来介绍是三个MP4分析⼯具,为后续理解MP4⽂件⼀些关键信息做辅助⼯具。
MP4⽂件格式解析⽂章转⾃:1.ISO/IEC 14496标准ISO/IEC 14496是MPEG专家组制定的MPEG-4标准,分为多个部分(仍在更新)。
参考:第⼀部分(ISO/IEC 14496-1):系统:描述视频和⾳频数据流的控制、同步以及混合⽅式(即混流Multiplexing,简写为MUX)。
第⼆部分(ISO/IEC 14496-2):视频:定义⼀个对各种视觉信息(包括⾃然视频、静⽌纹理、计算机合成图形等等)的编解码器。
(例如XviD编码就属于MPEG-4 Part 2)第三部分(ISO/IEC 14496-3):⾳频:定义⼀个对各种⾳频信号进⾏编码的编解码器的集合。
包括⾼级⾳频编码(Advanced Audio Coding,缩写为AAC)的若⼲变形和其他⼀些⾳频/语⾳编码⼯具。
第四部分(ISO/IEC 14496-4):⼀致性:定义对本标准其他的部分进⾏⼀致性测试的程序。
第五部分(ISO/IEC 14496-5):参考软件:提供⽤于演⽰功能和说明本标准其他部分功能的软件。
第六部分(ISO/IEC 14496-6):多媒体传输集成框架(DMIF for Delivery Multimedia Integration Framework)第七部分(ISO/IEC 14496-7):优化的参考软件:提供对实现进⾏优化的例⼦(这⾥的实现指的是第五部分)。
第⼋部分(ISO/IEC 14496-8):在IP⽹络上传输:定义在IP⽹络上传输MPEG-4内容的⽅式。
第九部分(ISO/IEC 14496-9):参考硬件:提供⽤于演⽰怎样在硬件上实现本标准其他部分功能的硬件设计⽅案。
第⼗部分(ISO/IEC 14496-10):⾼级视频编码或称⾼级视频编码(Advanced Video Coding,缩写为AVC):定义⼀个视频编解码器(codec)。
AVC和XviD都属于MPEG-4编码,但由于AVC属于MPEG-4 Part 10,在技术特性上⽐属于MPEG-4 Part2的XviD要先进。
MP4格式详解1. 概览 (实例,很好) QuickTime 常⽤的⼀些Box mdhd 存放视频流创建时间,长度等信息 avc1 视频宽⾼、extionsion中有sps、pps信息(关于和esds) esds:aac⾳频头信息、视频vos、vo头信息() stts:定义每个sample时长(+) ctts:重建P、B帧的DTS、CTS。
stsc:sample-chunk映射表 stsz:指定了每个sample的size stco、co64:Chunk位置偏移表,指定了每个chunk在⽂件中的位置() elst:使某个track的时间戳产⽣偏移。
较少见, mp4a:另有mp4v,不同的mp4分⽀。
c实现的mp4的解析: () 主流编码器的 以下是⼀个典型的mp4格式的⽂件。
后⾯将逐⾏分析格式规范。
2. 详解 下⾯的内容翻译⾃ ISO_IEC_14496-12。
2.1 Box的概念 Box以⼀个header开头,它提供了 size 和 type。
ftpy Box Header ⽀持压缩或扩展⼤⼩(32或64位,可变)以及压缩、扩展类型(32位或完整的通⽤唯⼀标识符,即UUID)。
标准的Box都使⽤紧凑型(32位),⼤多数Box都使⽤紧凑型(32位)⼤⼩。
通常只有媒体数据框需要64位⼤⼩。
⼤⼩是整个Box的⼤⼩(包括size、type、header)、字段和所有包含的框。
这有助于⽂件的⼀般解析。
语法:aligned(8) class Box (unsigned int(32) boxtype, optional unsigned int(8)[16] extended_type) {unsigned int(32) size;unsigned int(32) type = boxtype;if (size==1) {unsigned int(64) largesize;} else if (size==0) {// box extends to end of file}if (boxtype==‘uuid’) {unsigned int(8)[16] usertype = extended_type;}} size:整型,为整个Box的⼤⼩(包含⼦Box),如果size是1,则使⽤largesize表⽰更⼤的范围(8字节),如果size是0则此Box作为⽂件中最后⼀个Box,范围直⾄⽂件末尾(only used for a Media Data Box)。
mp4⽂件结构分析MP4⽂件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4⽂件由若⼲个box组成,每个box有类型和长度,可以将box 理解为⼀个数据对象块。
box中可以包含另⼀个box,这种box称为container box。
⼀个MP4⽂件⾸先会有且只有⼀个“ftyp”类型的box,作为MP4格式的标志并包含关于⽂件的⼀些信息;之后会有且只有⼀个“moov”类型的box(Movie Box),它是⼀种container box,⼦box包含了媒体的metadata信息;MP4⽂件的媒体数据包含在“mdat”类型的box(Media Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引⽤其他⽂件时),媒体数据的结构由metadata进⾏描述。
下⾯是⼀些概念: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⽂件的结构树。
File Type Box(ftyp)(刚开始⽂件头)length(4字节):0x00000018:box的长度是24字节;boxtype(4字节):0x66747970:“ftyp”的ASCII码,box的标识;major_brand(4字节):0x6D703432:“mp42“的ASCII码;minor_version(4字节):0x00000000:mp42的版本号;compatible_brands(8字节):说明本⽂件遵从(或称兼容)ismo,iso2,mp41三种协议。
mp4是什么意思
Mp4是一种媒体文件格式,它是根据ISO(国际标准化组织)14496-14规范设计和开发的。
它是一种容易在不同的设备和操作系统上播放的多媒体文件格式。
MP4文件使用在许多应
用中,比如在视频转换等多种应用上。
MP4格式因为它占用的空间较小,特点是音视频文
件和图片融合成一个文件,处理相对来说也比较简单,文件大小也更小。
MP4文件结构包括视频和音频流,以及用于同步视频和音频流的定时器。
它的优势在于可
以同时在多设备之间播放,尤其是在RT(实时传输)传输模式之间的播放方式中,MP4在
实现多渠道的实时传输时有更多的优势。
此外,MP4文件还可以支持动态文件元数据更新,这样就可以在不同的环境下使用不同的文件元数据来改善用户体验。
MP4被广泛用于在线和离线的播放,是一种高压缩的媒体文件格式。
相比而言,其他格式
的音频和视频文件要求更大的存储以及更高的空间来容纳的素材数量。
尽管MP4文件最终
也会有一定的质量损失,但是此类媒体格式所提供的压缩程度已经非常及格。
尤其是在联
网播放中,MP4文件风靡无数网友。
总而言之,MP4是一种应用广泛的媒体文件格式,用于在线和离线的播放。
它可以部署在
不同的平台上,而且具有非常小的存储空间,运行起来也非常方便和能够实现多渠道的实
时传输。
它被广泛用于音视频转换,视频分享和视频编辑等等应用领域。
mp4⽂件结构分析--av_read_frame中的packet size如何获取---基本知识点Sample: 采样,对于⾳视频来说就是⼀个编码帧;Sample_count即总帧数,Sample_index即帧下标。
在⼀个Mp4⽂件⾥⾯,所有Box处理的Samples都是严格按照帧序号排列的。
删除或者修改⼀帧,很多个Box⾥⾯的内容需要从新计算。
Chunk: 块,⼀个Chunk包括⼀个或者多个同类型Samples,使⽤Chunk的⽬的是为了加快Sample数据访问效率; 在⼀个Chunk⾥⾯Sample顺序紧凑排列。
Tarck: 轨,是⾳频或者视频流信息定义的集合。
⼀个轨包括⼀个或者多个Chunk。
各轨之间有同步的问题。
Box(也叫atom): 盒,MP4⽂件各种信息定义的结构。
⼀个MP4⽂件就是有很多个各种类型的Box组成的。
Box有固定的格式4Bytes 4Bytes 8Bytes (Box_length-8)BytesBox_length | Box_type | Box_long_length | Box_dataa. Box_long_length 仅当Box_length=1时出现,他定义超长Box,超过32位数字的范围的就⽤64位表述b. Box_length 包含了⾃⼰和4字节的type。
因此⼀般情况下Box的负载是Box_length-8字节。
Box有两⼤类,⼀种是Container Box,这种Box⾥可以嵌套别的Box。
它的负载就是其他的Box。
下图加^的Box就是Container Box。
另外⼀种就是单独的Box,⾥⾯定义某⼀些信息数据。
Time_scale: 很多个Box⾥⾯都有time_scale,它定义了该媒体在1秒内的采样刻度, 可以理解为⼀秒钟有多少个单元。
Duration: 相对于time_scale的时间长度。
真实的时长 = duration/time_scale。
Overview and IntroductionCore ConceptsMP4文件格式中,所有的内容存在一个称为movie的容器中。
一个movie可以由多个track s 组成。
每个track就是一个随时间变化的媒体序列,例如,视频帧序列。
track里的每个时间单位是一个sample,它可以是一帧视频,或者音频。
sample按照时间顺序排列。
注意,一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。
MP4文件格式的定义里面,用sample这个单词表示一个时间帧或者数据单元。
每个track会有一个或者多个sample description s。
track里面的每个sample通过引用关联到一个sample description。
这个sample description s定义了怎样解码这个sample,例如使用的压缩算法。
与其他的多媒体文件格式不同的是,MP4文件格式经常使用几个不同的概念,理解其不同是理解这个文件格式的关键。
这个文件的物理格式没有限定媒体本身的格式。
例如,许多文件格式将媒体数据分成帧,头部或者其他数据紧紧跟随每一帧视频,!!!TODO(例如MPEG2)。
而MP4文件格式不是如此。
文件的物理格式和媒体数据的排列都不受媒体的时间顺序的限制。
视频帧不需要在文件按时间顺序排列。
这就意味着如果文件中真的存在这样的一些帧,那么就有一些文件结构来描述媒体的排列和对应的时间信息。
MP4文件中所有的数据都封装在一些box中(以前叫atom)。
所有的metadata(媒体描述元数据),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构box中。
MP4文件格式定义了这些box的格式。
Metadata对媒体数据(例如,视频帧)引用说明。
媒体数据可以包含在同一个的一个或多个box里,也可以在其他文件中,metadata允许使用URLs来引用其他的文件,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的metadata描述。
其他的文件不一定是MP4文件格式,例如,可能就没有一个box。
有很多种类的track,其中有三个最重要,video track包含了视频sample;audio track包含了audio sample;hint track稍有不同,它描述了一个流媒体服务器如何把文件中的媒体数据组成符合流媒体协议的数据包。
如果文件只是本地播放,可以忽略hint track,他们只与流媒体有关系。
Physical structure of the mediaBox定义了如何在sample table中找到媒体数据的排列。
这包括data reference(数据引用), t he sample size table, the sample to chunk table, and the chunk offset table. 这些表就可以找到track中每个sample在文件中的位置和大小。
data reference允许在第二个媒体文件中找到媒体的位置。
这样,一部电影就可以由一个媒体数据库中的多个不同文件组成,而且不用把它们全部拷贝到另一个新文件中。
例如,对视频编辑就很有帮助。
为了节约空间,这些表都很紧凑。
另外,interleave不是sample by sample,而是把单个track 的几个samples组合到一起,然后另外几个sample又进行新的组合,等等。
一个track的连续几个sample组成的单元就被称为chunk。
每个chunk在文件中有一个偏移量,这个偏移量是从文件开头算起的,在这个chunk内,sample是连续存储的。
这样,如果一个chunk包含两个sample,第二个sample的位置就是chunk的偏移量加上第一个sample的大小。
chunk offset table说明了每个chunk的偏移量,sample to chunk table说明了sample序号和chunk序号的映射关系。
注意chunk之间可能会有死区,没有任何媒体数据引用到这部分区域,但是chunk内部不会有这样的死区。
这样,如果在节目编辑的时候,不需要一些媒体数据,就可以简单的留在那里,而不用引用,这样就不用删除它们了。
类似的,如果媒体存放在第二个文件中,但是格式不同于M P4文件格式,这个陌生文件的头部或者其他文件格式都可以简单忽略掉。
Temporal structure of the media文件中的时间可以理解为一些结构。
电影以及每个track都有一个time scale。
它定义了一个时间轴来说明每秒钟有多少个ticks。
合理的选择这个数目,就可以实现准确的计时。
一般来说,对于audio track,就是audio的sampling rate。
对于video track,情况稍微复杂,需要合理选择。
例如,如果一个media TimeScale是30000,media sample durations是1001,就准确的定义了NTSC video的时间格式(虽然不准确,但一般就是29.97),and provide 19.9 hours of time in 32 bits.Track的时间结构受一个edit list影响,有两个用途:全部电影中的一个track的一部分时间片断变化(有可能是重用);空白时间的插入,也就是空的edits。
特别注意的是如果一个track不是从节目开头部分开始,edit list的第一个edit就一定是空的edit。
每个track的全部duration定义在文件头部,这就是对track的总结,每个sample有一个规定的duration。
一个sample的准确描述时间,也就是他的时间戳(time-stamp)就是以前的sampl e的duration之和。
Interleave文件的时间和物理结构可以是对齐的,这表明媒体数据在容器中的物理顺序就是时间顺序。
另外,如果多个track的媒体数据包含在同一个文件中,这个媒体数据可以是interleaved。
一般来说,为了方便读取一个track的媒体数据,同时保证每个表紧凑,以一个合适的时间间隔(例如1秒)做一次interleave,而不是sample by sample。
这样就可以减少chunk的数据,减小chunk of fset table的大小。
Composition如果多个audio track包含在同一个文件中,他们有可能被混合在一起进行播放,并且由一个总track volume和左/右balance控制。
类似的,video track也可以根据各自的层次序列号(从后向前)和合成模式进行混合。
另外,每个track可以用一个matrix进行变换,也可以全部电影用一个matrix进行变换。
这样既可以进行简单操作(例如放大图像,校正90º旋转),也可以做更复杂的操作(例如shearing, arb itrary rotation)。
这个混合方法只是非常简单,是一个缺省的方法,MPEG4的另一份文档会定义更强有力的方法(例如MPEG-4 BIFS)。
Random access这一章说明如何seek。
Seeking主要是利用sample table box里面包含的子box来实现的,还需要考虑edit list的影响。
可以按照以下步骤seek某一个track到某个时间T,注意这个T是以movie header box里定义的time scale为单位的:1. 如果track有一个edit list,遍历所有的edit,找到T落在哪个edit里面。
将Edit的开始时间变换为以movie time scale为单位,得到EST,T减去EST,得到T',就是在这个edit里面的duration,注意此时T'是以movie的time scale为单位的。
然后将T'转化成track媒体的time scale,得到T''。
T''与Edit的开始时间相加得到以track媒体的time scale为单位的时间点T'''。
2. 这个track的time-to-sample表说明了该track中每个sample对应的时间信息,利用这个表就可以得到T'''对应的sample N T。
3.sample N T可能不是一个random access point,这样就需要其他表的帮助来找到最近的random access point。
一个表是sync sample表,定义哪些sample是random ac cess point。
使用这个表就可以找到指定时间点最近的sync sample。
如果没有这个表,就说明所有的sample都是synchronization points,问题就变得更容易了。
另一个[mp4文件格式]获取mp4文件信息7 - 查找关键帧wqyuwss 发表于 2007-5-1 4:48:00查找过程与查找sample的过程非常类似,只是需要利用sync sample atom来确定key frame的sample序号1.确定给定时间的sample序号2.检查sync sample atom来发现这个sample序号之后的key frame3.检查sample-to-chunk atom来发现对应该sample的chunk4.从chunk offset atom中提取该trunk的偏移量5.利用sample size atom找到sample在trunk内的偏移量和sample的大小[mp4文件格式]获取mp4文件信息6 - 查找samplewqyuwss 发表于 2007-5-1 4:47:00当播放一部电影或者一个track的时候,对应的media handler必须能够正确的解析数据流,对一定的时间获取对应的媒体数据。
如果是视频媒体,media handler可能会解析多个atom,才能找到给定时间的sample的大小和位置。
具体步骤如下:1.确定时间,相对于媒体时间坐标系统2.检查time-to-sample atom来确定给定时间的sample序号。
3.检查sample-to-chunk atom来发现对应该sample的chunk。
4.从chunk offset atom中提取该trunk的偏移量。
5.利用sample size atom找到sample在trunk内的偏移量和sample的大小。
例如,如果要找第1秒的视频数据,过程如下:1.第1秒的视频数据相对于此电影的时间为6002.检查time-to-sample atom,得出每个sample的duration是40,从而得出需要寻找第6 00/40 = 15 + 1 = 16个sample3.检查sample-to-chunk atom,得到该sample属于第5个chunk的第一个sample,该ch unk共有4个sample4.检查chunk offset atom找到第5个trunk的偏移量是204725.由于第16个sample是第5个trunk的第一个sample,所以不用检查sample size atom,trunk的偏移量即是该sample的偏移量20472。