MP4文件结构刨析

合集下载

mp3和mp4解压方式原理2000字

mp3和mp4解压方式原理2000字

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中的 chunk划分标准

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文件是由多个不同类型的数据块组成的。

这些数据块包括视频、音频、文本、元数据等。

MP4文件的结构由头部、媒体数据和索引组成。

头部包含了文件的基本信息,媒体数据包含了实际的音视频内容,索引则用于快速定位和访问媒体数据。

MP4文件中的视频数据通常使用H.264或者MPEG-4 Part 2这样的编码格式。

这些编码格式可以将视频数据压缩成较小的体积,同时保持较高的画质。

音频数据则可以使用AAC或者MP3这样的格式进行压缩。

这些压缩技术使得MP4文件可以在较小的文件大小下存储高质量的音视频内容。

MP4文件的播放原理也非常简单。

当我们打开一个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

mp4

谢谢观看
MPEG-4标准构成
MPEG-4码流主要包括基本码流和系统流,基本码流包括音视频和场景描述的编码流表示,每个基本码流只包 含一种数据类型,并通过各自的解码器解码。系统流则指定了根据编码视听信息和相关场景描述信息产生交互方 式的方法,并描述其交互通信系统。
系统
图1MPEG-4系统把音视频对象及其组合复用成一个场景,提供与场景互相作用的工具,使用户具有交互能力。 MPEG-4的数据在3个层中进行传输,这3层分别是压缩层、同步层和传输层。其中,压缩层是执行媒体解码的系统 组件,接收从同步层传来的压缩数据,并完成解码操作。同步层负责各个压缩媒体的同步和缓冲,一方面接收来 自传输层的同步层数据包(SL),从流中提取同步数据,为以后的同步解码和基本流解码的合成做准备;另一方面, 实现压缩的数据流和同步信息封装层的同步数据包,并将它们传输到传输层。传输层完成各种传输协议的描述, 使用DMIF应用接口,通过接口定义数据流的传输接口,并定义信道建立和断开的信号。MPEG-4的系统终端模型如 图1所示。
mp4
文件格式
目录
01 分部
03 MPEG-4标准构成
02 MPEG-4的特点 04 应用
MP4是一套用于音频、视频信息的压缩编码标准,由国际标准化组织(ISO)和国际电工委员会(IEC)下属 的“动态图像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版 在1999年12月通过。MPEG-4格式的主要用途在于上流、光盘、语音发送(视频),以及电视广播。
MPEG-4包含了MPEG-1及MPEG-2的绝大部份功能及其他格式的长处,并加入及扩充对虚拟现实模型语言 (VRML, VirtualReality Modeling Language)的支持,面向对象的合成档案(包括音效,视讯及VRML对 象),以及数字版权管理(DRM)及其他互动功能。而MPEG-4比MPEG-2更先进的其中一个特点,就是不再使用宏 区块做影像分析,而是以影像上个体为变化记录,因此尽管影像变化速度很快、码率不足时,也不会出现由一系列的子标准组成,被称为部 (part)(有时也译为卷),包括以下的部分: 第一部分(ISO/IEC -1):系统:描述视讯和音频数据流的控制、同步以及混合方式(即混流 Multiplexing,简写为MUX)。 第二部分(ISO/IEC -2):视讯:定义了一个对各种视觉讯息(包括自然视讯、静止纹理、计算机合成图形 等等)的编译码器。(例如XviD编码就属于MPEG-4 Part2) 第三部分(ISO/IEC -3):音讯:定义了一个对各种音频讯号进行编码的编译码器的集合。包括高阶音频编 码(AdvancedAudio Coding,缩写为AAC)的若干变形和其他一些音频/语音编码工具。 第四部分(ISO/IEC -4):一致性:定义了对本标准其他的部分进行一致性测试的程序。 第五部分(ISO/IEC -5):参考软件:提供了用于演示功能和说明本标准其他部分功能的软件。 第六部分(ISO/IEC -6):多媒体传输整合框架(DMIF for Delivery Multimedia IntegrationFramework) 第七部分(ISO/IEC -7):优化的参考软件:提供了对实作进行优化的例子(这里的实作指的是第五部分)。 第八部分(ISO/IEC -8):在IP络上传输:定义了在IP络上传输MPEG-4内容的方式。

mp4 reader 解析

mp4 reader 解析

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原理

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⽂件格式的解析,以及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文件格式入门

MP4文件格式入门
Movie Header Atoms – MVHD
Movie header atom 定义了整个 movie 的特性,例如 time scale 和 duration,它的 atom 类型是'mvhd'。
字段 尺寸 类型 版本 标志 生成时间 修订时间 Time scale
长度(字节) 4 4 1 3 4 4 4
字段 尺寸 类型
长度(字节) 4 4
描述 这个 movie header atom 的字节数 moov
以下是实际的 sample_100kbit.mp4 的部分字节,可以看到结果是
主要包含四个子 atom,movie header atom(mvhd), 一个 audio track atom(trak), 一个 video track atom(trak)。
mp4 文件例子
Darwin Streaming Server 里面有一些很好的工具,可以帮助分析 mp4 文件格式。
但是如果可以自己逐字节的 parse 文件,可以更好的了解 mp4 文件格式。这里我就逐字节的分析文件结构。 文件例子是 DSS 里面包含的 sample_100kbit.mp4
Movie Atom - MOOV
The time value for the start time of the current selection.
The duration of the current selection in movie time scale units.
当前时间 下一个待添加 track 的 ID 值。0 不是一个有效的 ID 值。
Overview and Introduction
Core Concepts

MP4文件格式详解——结构概述

MP4文件格式详解——结构概述

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文件格式

5分钟入门MP4文件格式

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格式在互联⽹常见的格式中,跨平台最好的应该就属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文件格式解析

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格式详解

MP4格式详解

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文件结构分析

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是什么意思

mp4是什么意思
Mp4是一种媒体文件格式,它是根据ISO(国际标准化组织)14496-14规范设计和开发的。

它是一种容易在不同的设备和操作系统上播放的多媒体文件格式。

MP4文件使用在许多应
用中,比如在视频转换等多种应用上。

MP4格式因为它占用的空间较小,特点是音视频文
件和图片融合成一个文件,处理相对来说也比较简单,文件大小也更小。

MP4文件结构包括视频和音频流,以及用于同步视频和音频流的定时器。

它的优势在于可
以同时在多设备之间播放,尤其是在RT(实时传输)传输模式之间的播放方式中,MP4在
实现多渠道的实时传输时有更多的优势。

此外,MP4文件还可以支持动态文件元数据更新,这样就可以在不同的环境下使用不同的文件元数据来改善用户体验。

MP4被广泛用于在线和离线的播放,是一种高压缩的媒体文件格式。

相比而言,其他格式
的音频和视频文件要求更大的存储以及更高的空间来容纳的素材数量。

尽管MP4文件最终
也会有一定的质量损失,但是此类媒体格式所提供的压缩程度已经非常及格。

尤其是在联
网播放中,MP4文件风靡无数网友。

总而言之,MP4是一种应用广泛的媒体文件格式,用于在线和离线的播放。

它可以部署在
不同的平台上,而且具有非常小的存储空间,运行起来也非常方便和能够实现多渠道的实
时传输。

它被广泛用于音视频转换,视频分享和视频编辑等等应用领域。

mp4文件结构分析--av_read_frame中的packet size如何获取---基本知识点

mp4文件结构分析--av_read_frame中的packet size如何获取---基本知识点

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。

mp4文件格式详解

mp4文件格式详解

MP4文件格式综述关键概念MP4文件格式中,所有的内容存在一个称为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方案

mp4方案

MP4方案引言MP4(MPEG-4 Part 14)是一种最常用的音频和视频容器格式。

它是由MPEG (Moving Picture Experts Group)发起的一项标准化工作,旨在提供一种统一的方式来存储音频和视频数据,并可在各种平台和播放器上播放。

本文将介绍MP4文件的基本结构和使用场景。

MP4文件结构MP4文件采用一种层次化的结构,每个层次都包含了特定类型的数据。

下面是MP4文件的基本结构:1.文件头(File Header):包含了文件的基本信息,如文件类型、版本和相关的元数据。

2.媒体数据(Media Data):包含音频和视频数据的实际内容。

3.媒体信息(Media Information):包含了媒体数据的描述,如音频和视频的编码格式、分辨率和码率等。

4.媒体索引(Media Index):包含了媒体数据在文件中的位置信息,以便快速定位和访问。

MP4文件还可以包含其他辅助信息,如字幕、章节和扩展元数据等。

MP4文件的使用场景MP4格式在各种应用中都有广泛的应用。

以下是一些常见的使用场景:1.视频存储与传输:MP4格式是一种常用的视频文件格式,可用于存储和传输各种类型的视频内容。

它具有良好的兼容性和可扩展性,可以在各种设备和平台上播放。

2.在线视频流媒体:MP4格式被广泛用于在线视频平台和流媒体服务。

它可以实现视频的快速加载和流畅播放,并能够适应不同的网络条件和设备。

3.移动应用开发:MP4格式在移动应用开发中也有重要的地位。

它可以作为移动应用中音视频内容的存储格式,同时也支持流式传输,可以实现实时的音视频通信和推送。

4.兼容性和互操作性:MP4格式被广泛支持,并具有良好的兼容性和互操作性。

它可以在不同的操作系统、设备和播放器上播放,而无需额外的插件或软件。

使用MP4方案的注意事项在使用MP4方案时,需要注意以下事项:1.编码格式兼容性:MP4文件支持多种不同的音视频编码格式,但不同设备和平台对编码格式的支持程度可能不同。

mp4文件格式分析

mp4文件格式分析

十六进制码流分析:ftyp Box00 00 00 1C: size ,28,表示此BOX有28个字节,表示长度的四个字节也计算在内。

以下同66 74 79 70: type,表示BOX TYPE,此处为ftyp6D 70 34 32: 可能是兼容的格式信息,/////mp4200 00 00 00: 可能是插入的空字节,/////也可能是version ,flags6D 70 34 32: 可能是兼容的格式信息,mp42/////major-brand6D 70 34 31: 可能是兼容的格式信息,mp41///// minor-version69 73 6F 6D: isom, ftyp中的最后一个标识,compatible-brands[]; // to end of the boxThe brand ‘mp41’ is defined as identifying version 1 of this specification (ISO/IEC 14496-1:2001), and the brand ‘mp42’ identifies this version of the specification; at least one of these brands shall appear in the compatible-brands list in the file-type box, in all files conforming to this specification.moov Box00 03 B0 59: size of moov.241753个字节6D 6F 6F 76: moovmvhd Box00 00 00 6C: size,mvhd Box的大小为108个字节6D 76 68 64: mvhd00 00 00 00: version,flagsBE EE 87 C5: creation-time创建文件的时间,是距离1904年1月1日0点的秒数BE EE 87 C5: modifiation-time修改文件的时间,00 01 5F 90: timescale时标,时间刻度的单位,为1/90 000秒01 A8 61 B8: duration持续时间00 01 00 00: rate播放描述的等级01 00: volume播放时的音量00 00: 保留的16bits的000 00 00 00: 保留的32bits的000 00 00 00: 保留的32bits的000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0040 00 00 00 : matrix给视频提供的转换矩阵00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00: 6个32bits的pre-defined 的000 01 00 CA: next-track-ID下一个轨迹IDiods Box00 00 00 21: size of iods,33个字节69 6F 64 73: iods, Initial Object Descriptor00 00 00 00: version,flags10 13 00 4F: 可能是OD, Object DescriptorFF FF 0F FE:FF 0E 04 00:00 00 01 0E:04 00 00 00:02udta Box00 00 06 8F: size of udta ,167975 64 74 61: udta,uuid Box00 00 04 A9: size of uuid,119375 75 69 64: uuidF7 8C AA 0C 36 BE 4C E9 88 D2 03 C2 56 DA BE B2 : 由于boxtype = uuid而定义的16个字节的usertype EES-3-0-410VEAEAudioEncoder-2-1-11V bitRate=2000000bpsV keyFrame Period In Ms=10000V number of Pass=2V progressive Interlaced=0V rateControlMode=cbrV smoothVsSharp=0V sourceNature=naturalV useBFrame =false.此处表明本码流没有使用B帧V videoEncoderType=mpeg4V advVideo EncoderType=mpeg4V allowBitRateUnderflow=falseV change Rgb Yuv Conversion=falseV setCustomBitmapSize=falseV useCustomPixedAspectRatio=falseV useExpertFeaturesASP=falseV useMotionFiltering=falseV useVideoPacket=falseV vbvSizeInMs=1000V burnLogo=falseV changeframerate=falseV useColorAdjustment=falseV useCropFilter=falseV useScaleFilter=falseV useSpatialFilter=falseV useTimecodes=falseA audioEncoderType=aacA bitRate=64000bpsA useAutomaticBandwidth=trueA useMS=trueA balanceLeftRight=0A volumeInDB=0starttime=0stoptime=9223372036854775807,MTUSize=1448exportType=mp4hinted=trueprogressiveDownload=trueallowDebugInformationInStream=trueavoidQuickTime6Warnings=falseforceETV15compatibility=falseforcePlayerCompatibility=falsemultiThreadedOptimization=0openA VIWith=DirectShowpreviewOnOff=1previewlayout=0showEncodingStatistics=true.......................hnti Box00 00 01 DE:size of hnti,47868 6E 74 69:hntirtp Box00 00 01 D6:size of rtp,47072 74 70 20:rtp73 64 70 20:sdpa=mpeg4-iod:”data:application/mpeg4-iod;base64 ................................trak Box00 00 01 A4: size of trak,42074 72 61 6B: traktkhd Box00 00 00 5C: size of tkhd,9274 6B 68 64: tkhd, track head box00 00 00 01: 00,version; 00 00 01,track enable flagsBE EE 87 C5: creation-time创建文件的时间BE EE 87 C5: modifiation-time修改文件的时间,两个时间应该相同00 00 00 01: track-ID00 00 00 00: 保留的32bits的001 A8 5E 16: duration持续的时间00 00 00 00 00 00 00 00: 保留的2个32bits的000 00:layer 000 00:pre-defined 000 00:volume,as non audio,if audio ,0x010000 00:reserved 000 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 40 00 00 00 :matrix00 00 00 00:width,if track_is_visual 0x01400000 else 000 00 00 00:height,if track_is_visual 0x00F00000 else 0mdia Box00 00 01 28: size of mdia,2966D 64 69 61: mdiamdhd Box00 00 00 20: size of mdhd ,326D 64 68 64: mdhd00 00 00 00: versionBE EE 87 C5: creation-timeBE EE 87 C5: modification-time00 00 03 E8: timescale00 04 B7 17: duration0 :pad10101 01110 00100: 3个5bits的language00 00 :pre-defined 0hdlr Box00 00 00 21:size of hdlr,3368 64 6C 72: hdlr00 00 00 00: version00 00 00 00: pre-defined 06F 64 73 6D:odsm,handler-type. ObjectDescriptorStream 00 00 00 00 00 00 00 00 00 00 00 00 : 3个reserved 00 :string nameminf Box00 00 00 DF: size of minf,2236D 69 6E 66: minfnmhd Box00 00 00 0C: size of nmhd,126E 6D 68 64: nmhd00 00 00 00: versiondinf Box00 00 00 24: size of dinf,3664 69 6E 66: dinfdref Box00 00 00 1C: size of dref,2864 72 65 66: dref00 00 00 00: version00 00 00 01: entry-counturl Box00 00 00 0C: size of url ,1275 72 6C 20: url00 00 00 01: locationstbl Box00 00 00 A7: size of stbl,16773 74 62 6C: stblstsd Box00 00 00 43: size of stsd,6773 74 73 64: stsd00 00 00 00: version,flags00 00 00 01: entry-countmp4s Box00 00 00 33: size of mp4s, 516D 70 34 73: mp4s00 00 00 00: version00 00 00 01: ESesds Box00 00 00 23: size of esds,3565 73 64 73: esds00 00 00 00: version03 15 00 00:00 04 0D 01:05 00 00 C8:00 00 00 00:00 00 00 00:06 01 02:stts Box00 00 00 18: size of stts,2473 74 74 73: stts00 00 00 00: version00 00 00 01: entry-count00 00 00 01: sample-count00 04 B7 17: sample-deltastsc Box00 00 00 1C: size of stsc ,2873 74 73 63: stsc00 00 00 00: version00 00 00 01: entry-count00 00 00 01: first-chunk00 00 00 01: samples-per-chunk00 00 00 01: sample-description-indexstsz Box00 00 00 14: size of stsz,2073 74 73 7A: stsz00 00 00 00: version00 00 00 12: sample-size00 00 00 01: sample-countstco Box00 00 00 14: size of stco,2073 74 63 6F: stco00 00 00 00: version00 00 00 01: entry-count00 03 B0 7D: chunk-offsettref Box00 00 00 18: size of tref,2474 72 65 66: trefmpod Box00 00 00 10: size of mpod,166D 70 6F 64: mpod00 00 00 C9:00 00 00 65:trak Box00 00 01 91: size of trak,40174 72 61 6B: traktkhd Box00 00 00 5C: size of tkhd,9274 6B 68 64: tkhd00 00 00 01: 00,version; 00 00 01,track enable flagsBE EE 87 C5: creation-time创建文件的时间BE EE 87 C5: modifiation-time修改文件的时间,两个时间应该相同00 00 00 02: track-ID00 00 00 00: 保留的32bits的001 A8 5E 16: duration持续的时间00 00 00 00 00 00 00 00: 保留的2个32bits的000 00:layer 000 00:pre-defined 000 00:volume,as non audio,if audio ,0x010000 00:reserved 000 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 40 00 00 00 :matrix00 00 00 00:width,if track_is_visual 0x01400000 else 000 00 00 00:height,if track_is_visual 0x00F00000 else 0mdia Box00 00 01 2D:size of mdia,3016D 64 69 61:mdiamdhd Box00 00 00 20: 326D 64 68 64:mdhd00 00 00 00 :version,flagsBE EE 87 C5: creation-time创建文件的时间BE EE 87C5: modifiation-time修改文件的时间,两个时间应该相同00 00 03 E8: timescale时标00 04 B7 17: duration持续的时间55 C4:pad, 3个5bits的language00 00: pre-defined 0hdlr Box00 00 00 21:size of hdlr ,3368 64 6C 72: hdlr00 00 00 00: version00 00 00 00: pre-defined 073 64 73 6D: sdsm,handler-type, SceneDescriptionStream00 00 00 00 00 00 00 00 00 00 00 00 : 3个reserved00 :string nameminf Box00 00 00 E4: size of minf,2286D 69 6E 66: minfnmhd Box00 00 00 0C: size of nmhd,126E 6D 68 64: nmhd00 00 00 00: versiondinf Box00 00 00 24: size of dinf,3664 69 6E 66: dinfdref Box00 00 00 1C: size of dref,2864 72 65 66: dref00 00 00 00: version00 00 00 01: entry-counturl Box00 00 00 0C: size of url ,1275 72 6C 20: url00 00 00 01: locationstbl Box00 00 00 AC: size of stbl,17273 74 62 6C: stblstsd Box00 00 00 48: size of stsd,7273 74 73 64: stsd00 00 00 00: version,flags00 00 00 01: entry-countmp4s Box00 00 00 38: size of mp4s, 566D 70 34 73: mp4s00 00 00 00: version00 00 00 01: ESesds Box00 00 00 28: size of esds,4065 73 64 73: esds00 00 00 00: version03 1A 00 00:00 04 12 02:0D 00 00 20:00 00 00 00:00 00 00 00:05 03 00 00:40 06 01 02:stts Box00 00 00 18: size of stts,2473 74 74 73: stts00 00 00 00: version00 00 00 01: entry-count00 00 00 01: sample-count00 04 B7 17: sample-deltastsc Box00 00 00 1C: size of stsc ,2873 74 73 63: stsc00 00 00 00: version00 00 00 01: entry-count00 00 00 01: first-chunk00 00 00 01: samples-per-chunk00 00 00 01: sample-description-index stsz Box00 00 00 14: size of stsz,2073 74 73 7A: stsz00 00 00 00: version00 00 00 18: sample-size00 00 00 01: sample-countstco Box00 00 00 14: size of stco,2073 74 63 6F: stco00 00 00 00: version00 00 00 01: entry-count00 03 B0 8F: chunk-offsettrak Box00 01 71 55:size of trak,74 72 61 6B:traktkhd Box00 00 00 5C: size of tkhd,9274 6B 68 64: tkhd, track head box00 00 00 01: 00,version; 00 00 01,track enable flagsBE EE 87 C5: creation-time创建文件的时间BE EE 87 C5: modifiation-time修改文件的时间,两个时间应该相同00 00 00 C9: track-ID00 00 00 00: 保留的32bits的001 A8 61 B8: duration持续的时间00 00 00 00 00 00 00 00: 保留的2个32bits的000 00:layer 000 00:pre-defined 000 00:volume,as non audio,if audio ,0x010000 00:reserved 000 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 01 00 00 00 00 00 0000 00 00 00 00 00 00 00 40 00 00 00 :matrix02 D0 00 00:width,if track_is_visual 0x01400000 else 001 E0 00 00:height,if track_is_visual 0x00F00000 else 0mdia Box00 01 70 CD: size of mdia6D 64 69 61: mdiamdhd Box00 00 00 20: size of mdhd ,326D 64 68 64: mdhd00 00 00 00: versionBE EE 87 C5: creation-timeBE EE 87 C5: modification-time00 01 5F 90: timescale01 A8 61 B8: duration0 :pad10101 01110 00100: 3个5bits的language00 00 :pre-defined 0hdlr Box00 00 00 21:size of hdlr,3368 64 6C 72: hdlr00 00 00 00: version00 00 00 00: pre-defined 076 69 64 65: vide,handler-type,表示此trak为视频00 00 00 00 00 00 00 00 00 00 00 00 : 3个reserved00 :string nameminf Box00 01 70 84: size of minf,943406D 69 6E 66: minfvmhd Box00 00 00 14: size of nmhd76 6D 68 64: nmhd00 00 00 01: version,flags00 00 00 00:00 00 00 00:dinf Box00 00 00 24: size of dinf,3664 69 6E 66: dinfdref Box00 00 00 1C: size of dref,2864 72 65 66: dref00 00 00 00: version00 00 00 01: entry-counturl Box00 00 00 0C: size of url ,1275 72 6C 20: url00 00 00 01: locationstbl Box00 01 70 44: size of stbl73 74 62 6C: stblstsd Box00 00 00 AC: size of stsd,7273 74 73 64: stsd00 00 00 00: version,flags00 00 00 01: entry-countmp4v Box00 00 00 9C: size of mp4v6D 70 34 76: mp4v00 00 00 00: version00 00 00 01: ES00 00 00 00 00 00 :00 00 00 00 00 00 00 00 00 00 02 D0 01 E0 00 48 00 00 00 48 00 00 00 00 00 00 00 01 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 00 00 00 18 FF FF esds Box00 00 00 46: size of esds65 73 64 73: esds00 00 00 00: version03 38 00 00:00 04 30 20:11 03 D0 90:00 1E 84 80:00 1E 84 80:05 21 00 00:01 B0 00 00:00 01 B5 0E:A0 20 20 2F:00 00 01 00:00 00 01 20:00 C7 88 BA:98 51 68 43:C1 46 3F 06:01 02 :stts Box00 00 E7 90: size of stts73 74 74 73: stts00 00 00 00: version00 00 1C F0: entry-count00 00 00 01: sample-count00 00 0B BB: sample-delta00 00 00 0100 00 11 9700 00 00 0100 00 0B BB00 00 00 0100 00 11 9A...........stsc Box00 00 0E 8C: size of stsc ,73 74 73 63: stsc00 00 00 00: version00 00 01 35: entry-count00 00 00 01: first-chunk00 00 00 15: samples-per-chunk00 00 00 01: sample-description-index00 00 00 0200 00 00 1800 00 00 0100 00 00 0300 00 00 1800 00 00 0100 00 00 0400 00 00 1800 00 00 01.............stsz Box00 00 73 D8 size of stsz,2073 74 73 7A: stsz00 00 00 00: version00 00 00 00: sample-size00 00 1C F1: sample-count00 00 86 24(从此开始,为当前chunk中每帧视频数据的字节大小,此大小与offset相对应,用offset找到偏移的绝对地址(指向mdat box中)后,从000001B6的第一个字节开始,加上对应的视频字节数,就是本帧的大小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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。

相关文档
最新文档