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按照时间顺序排列。

dash mp4 数据格式

dash mp4 数据格式

DASH MP4数据格式1 一般MP4文件格式1.1 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文件存放A VC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。

MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括:M4V, 3GP, F4V等。

1.2 Box基本概念mp4是由一个个“box”组成的,大box中存放小box,一级嵌套一级来存放媒体信息,box的基本结构如图1。

图1 box的基本结构Box字节序为网络字节序,也就是大端字节序(Big-Endian)。

由header和data 组成,其中header统一指明box的大小和类型,data根据类型有不同的意义和格式。

标准的box开头的4个字节(32位)为box size,该大小包括box header和box data整个box的大小。

如果box很大(例如存放具体视频数据的mdat box),超过了uint32的最大数值,size就被设置为1,表示这个box的大小为large size,真正的size值要在largesize字段上得到。

如果size为0,表示该box为文件的最后一个box,文件结尾即为该box结尾。

size后面紧跟的32位为box type,一般是4个字符,如“ftyp”、“moov”等,这些box type都是已经预定义好的,分别表示固定的意义。

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文件格式详细解析

mp4⽂件格式详细解析⽬录1. 概述2. mp4⽂件基本信息3. 封装格式重要概念4. 重要box介绍5. 其他box介绍6. 实⽤技术7. 开源软件参考[1] ISO/IEC 14496-12:2015[2] wikipedia/MPEG-4[3] wikipedia/ISO base media file format[4] wikipedia/MPEG-4 Part 14[5] Tocy/多媒体⽂件格式之MP4[6] Phil Cluff/What's in the box_![7] /gpac/mp4box.js[8] tao/Android⾳视频系列:视频容器操作篇 -- mp4容器打包实现[9] LiaoJunXiong/使⽤gpac封装mp4[10] Jameson Steiner/Fun with Container Formats – Part 21. 概述mp4或称MPEG-4 Part 14,是⼀种多媒体容器格式,扩展名为.mp4。

历史[6]:2001年,apple的QuickTime格式,.qt和.mov的后缀名。

2001年,MPEG-4 Part1,把基于QuickTime的box布局的容器格式添加到了MPEG-4标准。

2004年,标准⽂档把编码和容器格式的说明分开。

MPEG-4 Part12,定义了容器格式通⽤的box结构,即ISO媒体⽂件格式(ISO base media file format, ISOBMFF)。

MPEG-4 Part14,基于Part12进⾏了细化,定义了⽤于存储MPEG-4内容的容器格式,即.mp4格式。

图1 MP4 File Format.png以下是各标准⽂档的链接:QuickTime:QuickTime/QTFFMPEG-4 Part12:ISO/IEC 14496-12:2015MPEG-4 Part14:ISO/IEC 14496-14:2018,官⽹上这部分是付费的。

手机视频文件格式解析之 3GP-MP4

手机视频文件格式解析之 3GP-MP4

[转]手机视频文件格式解析之 3GP/MP42010-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.音视频码流数据可随意存放而不需按时间顺序排布。

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

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文件格式中,所有的内容存在一个称为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 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⽂件中的所有数据都装在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文件结构分析--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。

mp4parser 原理

mp4parser 原理

mp4parser 原理MP4Parser是一个用于处理MP4文件的Java库。

它提供了一种方便的方式来读取、修改和创建MP4文件,使开发人员能够轻松地操作和管理这些文件。

MP4(MPEG-4 Part 14)是一种常用的多媒体容器格式,广泛用于存储和传输音频、视频和字幕等数据。

MP4文件由一系列的媒体原子构成,这些原子包含了媒体数据和元数据,以及描述文件结构的信息。

MP4Parser的目标就是提供一种简单的方式来解析和操作这些原子。

MP4Parser的原理基于解析MP4文件的结构。

它通过逐个读取文件中的原子,解析其类型和大小,并根据需要进行相应的处理。

例如,如果需要读取媒体数据,MP4Parser会找到包含该数据的原子,并提供访问该数据的方法。

类似地,如果需要修改文件的元数据,MP4Parser会定位到相应的原子,并提供修改其内容的接口。

MP4Parser的另一个重要功能是创建MP4文件。

通过使用MP4Parser,开发人员可以按照需要构建MP4文件的结构,并向其中添加媒体数据和元数据。

例如,可以创建一个空白的MP4文件,并逐步添加音频和视频轨道,以及相应的元数据。

MP4Parser的设计目标是简单易用,同时提供足够的灵活性和功能。

它的代码结构清晰,功能模块化,使开发人员能够方便地集成到自己的项目中。

此外,MP4Parser还提供了一些高级功能,如支持分段文件和多线程处理等。

MP4Parser是一个强大而灵活的Java库,用于处理MP4文件。

它提供了一种简单而直观的方式来读取、修改和创建MP4文件,使开发人员能够轻松地操作和管理这些文件。

无论是解析文件结构、读取媒体数据,还是修改元数据、创建新文件,MP4Parser都能满足开发人员的需求,并提供高效可靠的功能。

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

MPEG-4文件结构解析目前MP4的概念被炒得很火,也很乱。

最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准。

随后MP4概念被转移到视频上,对应的是MPEG-4标准。

而现在我们流行的叫法,多半是指能播放MPEG-4标准编码格式视频的播放器。

但是这篇文章介绍的内容跟上面这些都无关,我们要讨论的是MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术视听对象编码的第12部分:ISO基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media file format)。

ISO/IEC组织指定的标准一般用数字表示,ISO/IEC 14496即MPEG-4标准。

MP4视频文件封装格式是基于QuickTime容器格式定义的,因此参考QuickTime的格式定义对理解MP4文件格式很有帮助。

MP4文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。

同时,MP4也支持流媒体。

MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。

现在我们就来看看MP4文件格式到底是什么样的。

1、概述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(Midia 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组成的单元。

在本文中,我们不讨论涉及hint的内容,只关注包含媒体数据的本地MP4文件。

下图为一个典型的MP4文件的结构树。

2、Box首先需要说明的是,box中的字节序为网络字节序,也就是大端字节序(Big-Endian),简单的说,就是一个32位的4字节整数存储方式为高位字节在内存的低端。

Box由header和body组成,其中 header统一指明box的大小和类型,body根据类型有不同的意义和格式。

标准的box开头的4个字节(32位)为box size,该大小包括box header 和box body整个box的大小,这样我们就可以在文件中定位各个box。

如果size 为1,则表示这个box的大小为large size,真正的size值要在largesize域上得到。

(实际上只有“mdat”类型的box才有可能用到large size。

)如果size为0,表示该box为文件的最后一个box,文件结尾即为该box结尾。

(同样只存在于“mdat”类型的box中。

)size后面紧跟的32位为box type,一般是4个字符,如“ftyp”、“moov”等,这些box type都是已经预定义好的,分别表示固定的意义。

如果是“uuid”,表示该box为用户扩展类型。

如果box type是未定义的,应该将其忽略。

3、File Type Box(ftyp)该box有且只有1个,并且只能被包含在文件层,而不能被其他box包含。

该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。

“ftyp” body依次包括1个32位的major brand(4个字符),1个32位的minor version(整数)和1个以32位(4个字符)为单位元素的数组compatible brands。

这些都是用来指示文件应用级别的信息。

该box的字节实例如下:4、Movie Box(moov)该box包含了文件媒体的metadata信息,“moov”是一个container box,具体内容信息由子box诠释。

同File Type Box一样,该box有且只有一个,且只被包含在文件层。

一般情况下,“moov”会紧随“ftyp”出现。

一般情况下(限于篇幅,本文只讲解常见的MP4文件结构),“moov”中会包含1个“mvhd”和若干个“trak”。

其中“mvhd”为header box,一般作为“moov”的第一个子box出现(对于其他container box来说,header box都应作为首个子box出现)。

“trak”包含了一个track的相关信息,是一个container box。

下图为部分“moov”的字节实例,其中红色部分为box header,绿色为“mvhd”,黄色为一部分“trak”。

4.1 Movie Header Box(mvhd)“mvhd”结构如下表。

“mvhd”的字节实例如下图,各字段已经用颜色区分开:4.2 Track Box(trak)“trak”也是一个container box,其子box包含了该track的媒体数据引用和描述(hint track除外)。

一个MP4文件中的媒体可以包含多个track,且至少有一个track,这些track 之间彼此独立,有自己的时间和空间信息。

“trak”必须包含一个“tkhd”和一个“mdia”,此外还有很多可选的box(略)。

其中“tkhd”为track header box,“mdia”为media box,该box是一个包含一些track媒体数据信息box的container box。

“trak”的部分字节实例如下图,其中黄色为“trak”box的头,绿色为“tkhd”,蓝色为“edts”(一个可选box),红色为一部分“mdia”。

4.2.1 Track Header Box(tkhd)“tkhd”结构如下表。

“tkhd”的字节实例如下图,各字段已经用颜色区分开:4.2.2 Media Box(mdia)“mdia”也是个container box,其子box的结构和种类还是比较复杂的。

先来看一个“mdia”的实例结构树图。

总体来说,“mdia”定义了track媒体类型以及sample数据,描述sample信息。

一般“mdia”包含一个“mdhd”,一个“hdlr”和一个“minf”,其中“mdhd”为media header box,“hdlr”为handler reference box,“minf”为media information box。

下面依次看一下这几个box的结构。

4.2.2.1 Media Header Box(mdhd)“mdhd”结构如下表。

“mdhd”的字节实例如下图,各字段已经用颜色区分开:4.2.2.2 Handler Reference Box(hdlr)“hdlr”解释了媒体的播放过程信息,该box也可以被包含在meta box(meta)中。

“hdlr”结构如下表。

“hdlr”的字节实例如下图,各字段已经用颜色区分开:4.2.2.3 Media Information Box(minf)“minf”存储了解释track媒体数据的handler-specific信息,media handler用这些信息将媒体时间映射到媒体数据并进行处理。

“minf”中的信息格式和内容与媒体类型以及解释媒体数据的media handler密切相关,其他media handler不知道如何解释这些信息。

“minf”是一个container box,其实际内容由子box说明。

一般情况下,“minf”包含一个header box,一个“dinf”和一个“stbl”,其中,header box根据track type(即media handler type)分为“vmhd”、“smhd”、“hmhd”和“nmhd”,“dinf”为data information box,“stbl”为sample table box。

下面分别介绍。

下图为“minf”部分字节实例,其中红色为box header,蓝色为“smhd”,绿色为“dinf”,黄色为一部分“stbl”。

4.2.2.3.1 Media Information Header Box(vmhd、smhd、hmhd、nmhd)Video Media Header Box(vmhd)Sound Media Header Box(smhd)Hint Media Header Box(hmhd)略Null Media Header Box(nmhd)非视音频媒体使用该box,略。

4.2.2.3.2 Data Information Box(dinf)“dinf”解释如何定位媒体信息,是一个container box。

“dinf”一般包含一个“dref”,即data reference box;“dref”下会包含若干个“url”或“urn”,这些box组成一个表,用来定位track数据。

简单的说,track可以被分成若干段,每一段都可以根据“url”或“urn”指向的地址来获取数据,sample描述中会用这些片段的序号将这些片段组成一个完整的track。

一般情况下,当数据被完全包含在文件中时,“url”或“urn”中的定位字符串是空的。

“dref”的字节结构如下表。

“url”或“urn”都是box,“url”的内容为字符串(location string),“urn”的内容为一对字符串(name string and location string)。

当“url”或“urn”的box flag为1时,字符串均为空。

相关文档
最新文档