QuickTime文件格式解析(mov、mp4)

2023-11-23 12:50

本文主要是介绍QuickTime文件格式解析(mov、mp4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:《MP4文件格式的解析,以及MP4文件的分割算法》
   《mov格式解析》
   《MOV及MP4文件格式中几个重要的Table》
   《Mov文件格式分析》
   《QuickTimeFileFormat》
   ISO/IEC_14496-12:ISO base media file format

文章目录

  • 一、简介
  • 二、原子(atom)
    • 1、简单原子
    • 2、QT原子
    • 3、常见的顶层原子类型
  • 三、文件结构解析(MP4)
    • 1、格式框架
    • 2、格式解析
      • 2.1 一级box
        • 2.1.1 ftyp box
        • 2.1.2 moov box
        • 2.1.3 free box
        • 2.1.4 mdat box
      • 2.2 二级box
        • 2.2.1 mvhd box
        • 2.2.2 trak box
        • 2.2.3 udat box
      • 2.3 三级box
        • 2.3.1 tkhd box
        • 2.3.2 mdia box
      • 2.4 四级box
        • 2.4.1 mdhd box
        • 2.4.2 hdlr box
        • 2.4.3 minf box
      • 2.5 五级box
        • 2.5.1 header box
        • 2.5.2 stbl box
      • 2.6 六级box
        • 2.6.1 stsd box
        • 2.6.2 stts box
        • 2.6.3 stsz box
        • 2.6.4 stsc box
        • 2.6.5 stss box
        • 2.6.6 stco/co64 box
        • 2.6.7 ctts box
  • 四、数据分析(MOV)
  • 五、相关资料
    • 1、文档资料
    • 2、分析工具
  • 六、问题解析
    • 1、如何获取总时长
    • 2、如何跳播
    • 3、在没有关键帧列表情况下如何跳播
  • 附录1
  • 附录2: ISO/IEC 14496 MPEG的协议标准
  • 附录3

一、简介

QuickTime是Apple公司开发的一套完整的多媒体平台架构,可以用来进行多种媒体的创建、生产和分发,并为这一过程提供端到端的支持:包括媒体的实时捕捉,以编程的方式合成媒体,导入和导出现有的媒体,还有编辑和制作,压缩,分发,以及用户回放等多个环节。QuickTime文件格式是QuickTime整个架构体系中的一环,非常基础和重要的一环。QuickTime的多媒体架构应用于Mac OS和Windows系统上,而QuickTime文件格式是平台无关的,可以应用于各类系统。常见的采用QuickTime文件格式的扩展名有:mov, qt, mp4, m4v, m4a, m4p, m4b等。

二、原子(atom)

原子atom是QuickTime用来构建等级数据结构的基本容器。新创建的QuickTime原子就像树的根。随后的每个原子都包含在其中并且包含数据和其它原子。如果一个QuickTime原子包含其它原子,就被叫做父原子,包含在其中的原子就叫做叶原子。

1、简单原子

原子包含一个原子头,原子头后面是原子数据。原子头包含原子的尺寸和类型字段,用于表示原子的字节尺寸和类型信息;它还可能包含一个扩展的尺寸字段,该字段以64位整数的形式给出了一个大原子的尺寸。原子结构如图1所示。

图1 原子结构图
图1 原子结构图

2、QT原子

原子的特点是:简单、抽象。QuickTime文件格式中的所有数据及信息都可以用原子和原子之间的嵌套关系来表达。然而,基本原子的缺点是,当应用程序遇到未知的原子类型(atom type)时,将无法确认该原子是否有下一级的子原子,此种情况下,应用程序即使对子原子类型是已知的,也无法进行解析。

QT原子是一种增强了的数据结构,它提供了一种更加通用的存储格式,并且消除了一些在使用简单原子时会出现的不明确的地方。QT原子中,根原子atom type项统一设置为“sean”。QT原子在简单原子的基础上,增加了原子ID和子原子数目。QT原子的结构如下图2所示。

图2 QT原子结构图
图2 QT原子结构图

3、常见的顶层原子类型

  • ‘moov’

  • ‘mdat’

  • ‘free’

  • ‘junk’

  • ‘pnot’

  • ‘skip’

  • ‘wide’

  • ‘pict’

  • ‘ftyp’

  • ‘uuid’ : Used by Sony’s MSNV brand of 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等。【1】

1、格式框架

mp4是由一个个“box”组成的,大box中存放小box,一级嵌套一级来存放媒体信息。box的基本结构是:

在这里插入图片描述
图3 box基本结构图

其中,size指明了整个box所占用的大小,包括header部分。如果box很大(例如存放具体视频数据的mdat box),超过了uint32的最大数值,size就被设置为1,并用接下来的8字节uint64来存放大小(实际上只有“mdat”类型的box才有可能用到large size),如果size为0,表示该box为文件的最后一个box,文件结尾即为该box结尾。(同样只存在于“mdat”类型的box中。)

一个mp4文件有可能包含非常多的box,在很大程度上增加了解析的复杂性,这个网页上http://mp4ra.org/atoms.html 记录了一些当前注册过的box类型。看到这么多box,如果要全部支持,一个个解析,怕是头都要爆了。还好,大部分mp4文件没有那么多的box类型,下图就是一个简化了的、常见的mp4文件结构:

在这里插入图片描述
在这里插入图片描述
图4 常见mp4文件结构图

一般来说,解析媒体文件,最关心的部分是视频文件的宽高、时长、码率、编码格式、帧列表、关键帧列表,以及所对应的时间戳和在文件中的位置。这些信息,在mp4中是以特定的算法分开存放在stbl box下属的几个box中的,需要解析stbl下面所有的box来还原媒体信息。下表是对于以上几个重要的box存放信息的说明,更完整的表格可参考MP4BOX.xls文件。
在这里插入图片描述

由此可知,要获取到mp4文件的帧列表,还挺不容易的,需要一层层解析,然后综合stts、stsc、stsz、stss、stco等这几个box的信息,才能还原出帧列表,每一帧的时戳和偏移量。而且,你要照顾可能出现或者可能不出现的那些box。。。可以看的出来,mp4把帧sample进行了分组,也就是chunk,需要间接的通过chunk来描述帧,这样做的理由是可以压缩存储空间,缩小媒体信息所占用的文件大小。这里面,stsc box的解析相对来说比较复杂,它用了一种巧妙的方式来说明sample和chunk的映射关系,后面会详细介绍一下。

首先需要说明的是:

1. box中的字节序为网络字节序,也就是大端字节序(Big-Endian),简单的说,就是一个32位的4字节整数存储方式为高位字节在内存的低端。
2. 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进行描述。

2、格式解析

下面我们将对以上主要box的解析进行详细说明:

2.1 一级box

一级box主要包含ftyp、moov、free、mdat等等。

2.1.1 ftyp box

ftyp box,在文件的开始位置,描述的文件的版本、兼容协议等。

/********************************************************************************************
**                            File Type Box (ftyp)
**
--------------------------------------------------------------------------------------------
**        字段名称              |    长度(bytes)   |        有关描述
--------------------------------------------------------------------------------------------
**        boxsize                |    4             |        box的长度
**        boxtype                |    4             |        box的类型
**        major_brand            |    4             |
**        minor_version          |    4             |        版本号
**        compatible_brands      |    4 * N         |        本文件遵从的多种协议(ismo, iso2, mp41)
********************************************************************************************/

运行结果:
在这里插入图片描述

2.1.2 moov box

moov box,这个box中不包含具体媒体数据,但包含本文件中所有媒体数据的宏观描述信息,moov box下有mvhd和trak box。

结构:

/********************************************************************************************
**        字段名称            |    长度(bytes)   |        有关描述
--------------------------------------------------------------------------------------------
**        boxsize            |    4             |        box的长度
**        boxtype            |    4             |        box的类型
*************************************************

这篇关于QuickTime文件格式解析(mov、mp4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418076

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动