在当今数字化时代,MP4 格式随处可见,无论是在线视频、手机拍摄的短片,还是从各种渠道获取的音频视频文件,MP4 都占据着主流地位。它就像一个万能的 “数字媒体集装箱”,高效地整合和传输着各种视听内容。接下来,让我们深入探索 MP4 封装格式的奇妙世界。

一、MP4 封装格式初印象

MP4,全称为 MPEG-4 Part 14,出⾃MPEG-4标准第14部分,是一种基于 MPEG-4 标准的多媒体容器格式。简单来说,它是一种用于存储音频、视频、字幕和图像等多种媒体数据的文件格式。就好比一个大行李箱,能把不同的物品(各类媒体数据)有条不紊地装在一起,方便携带和使用。MP4 格式具有很强的适应性,能在多种设备上播放,从电脑、手机到智能电视,都对它 “友好相待”,这也是它广受欢迎的重要原因之一。

二、MP4 的核心结构解析

MP4 文件的结构就像一座精心建造的大厦,由多个重要部分组成,其中最关键的是 “Box”(盒子)。可以把 MP4 文件想象成一个装满盒子的大仓库,每个盒子都有特定的用途和规则。每个box分为Header和Data。其中Header部分包含了box的类型和⼤⼩,Data包含子box或者数据,box可以嵌套⼦box。

(一)File Type Box(ftyp)

FileType Box 就像是 MP4 文件的 “身份证”,它存储了文件的基本信息,如使用的 MPEG-4 规范版本、兼容的品牌等。这个盒子是 MP4 文件的起始部分,不可或缺。通过它,播放器能快速识别文件是否符合 MP4 格式规范,以及该文件与哪些设备或软件兼容。例如,当你在不同设备上播放同一个 MP4 视频时,设备首先会读取 ftyp 盒子里的信息,判断能否顺利播放该视频。

(二)Media Data Box(mdat)

Media Data Box 是真正存放音频和视频数据的 “宝库”。如果把 MP4 文件比作一个装满宝藏的箱子,mdat 盒子就是里面最珍贵的宝物。它包含了经过编码压缩后的视频帧和音频样本,是我们最终看到的画面和听到的声音的来源。不同的编码格式,如 H.264、H.265 用于视频,AAC 用于音频,它们的数据都被存储在这个盒子里。

(三)Movie Box(moov)

Movie Box 是 MP4 文件的核心 “大脑”,它包含了描述整个视频和音频内容的元数据,包含本⽂件中所有媒体数据的宏观描述信息以及每路媒体轨道的具体信息。这就好比是一份详细的项目计划书,涵盖了视频的时长、帧率、分辨率、音频的采样率、声道数等关键信息。此外,moov 盒子还包含了时间和空间上如何同步音视频数据的信息,确保我们在观看视频时,声音和画面能够完美匹配,不会出现声画不同步的情况。我们下文所进一步讲解的都是moov中的子box。

三、moov 的 “五脏六腑”

moov 容器并非是一个混沌的整体,而是由多个有序的子结构(子原子)组成,这些子结构各司其职,共同构建起视频播放的 “指挥中心”。

(一)mvhd:视频的 “总导演”

mvhd(Movie Header Box)是 moov 容器中的 “总导演”,它掌控着整个视频文件的全局信息。在 mvhd 中,我们能找到视频的创建时间、修改时间、时间尺度(time scale)等关键参数。

时间尺度是一个非常重要的概念,它定义了时间的基本单位。例如,时间尺度为 90000,表示每一秒被划分为 90000 个时间单位。结合这个参数,播放器就能精确计算出每一帧画面应该在何时播放,从而实现视频的流畅播放。此外,mvhd 还包含了视频的时长信息,它以时间尺度为基础,告诉播放器这段视频总共持续多少个时间单位。

mvhd(Movie Header Box)作为 moov 的首个子结构,其内部结构如下:

  • 版本与标志位

    • 版本(version):占 4 字节,指示 mvhd 结构的版本(通常为 0 或 1)。若版本为 1,部分时间戳字段将扩展为 64 位。

    • 标志位(flags):占 3 字节,用于标识特殊属性。例如,标志位 0x000100 表示该视频支持预览播放。

  • 创建时间(creation_time):占 4 字节(或 64 位,版本为 1 时),记录文件创建的时间戳,以秒为单位(需结合 time_scale 换算实际时间)。

  • 修改时间(modification_time):与创建时间类似,记录文件最后一次修改的时间。

  • 时间尺度(time_scale):占 4 字节,定义时间的基本单位。如 time_scale 为 30,表示 1 秒被划分为 30 个时间单位,常用于计算帧率(若帧率为 30fps,每帧持续 1 个时间单位)。

  • 持续时间(duration):占 4 字节(或 64 位),表示视频总时长,以 time_scale 为基准单位。

  • 速率(rate):占 4 字节,默认为 1.0(正常播放速度),0.5 表示慢放,2.0 表示快进。

  • 音量(volume):占 2 字节,范围 0 - 256(0 为静音,256 为最大音量)。

(二)trak:音视频的 “轨道指挥官”

trak(Track Box)就像是铁路系统中的轨道指挥官,在 MP4 文件中,每一个 trak 对应一条音视频轨道。一个 MP4 文件通常包含至少一条视频轨道和一条音频轨道,也可能包含多条音频轨道(如多语言配音)或字幕轨道。

每个 trak 内部又包含了多个子原子,其中最重要的是 tkhd(Track Header Box)和 mdia(Media Box)。tkhd 记录了轨道的基本属性,如轨道的 ID、轨道在视频中的位置、轨道的宽度和高度(对于视频轨道)等信息。而 mdia 则进一步细化,它描述了轨道的数据格式和编码信息。

每个 trak关键子结构如下:

1. tkhd:轨道属性的 “基础档案”

  • 版本与标志位:与 mvhd 类似,定义结构版本和轨道特殊属性(如是否为隐藏轨道)。

  • 创建 / 修改时间:记录轨道创建和修改的时间戳。

  • 轨道 ID(track_ID):占 4 字节,唯一标识当前轨道(如 1 代表视频轨道,2 代表音频轨道)。

  • 图层(layer):占 2 字节,用于多层轨道叠加时的层级顺序(数值越小越靠前)。

  • 宽度与高度:对于视频轨道,存储画面的像素宽度和高度;音频轨道则为 0。

2. mdia:媒体数据的 “格式说明书”

mdia(Media Box)如同音视频的 “格式说明书”,它包含了 minf(Media Information Box)和 mdhd(Media Header Box)等子box。mdhd 主要记录与媒体相关的时间信息,比如媒体的创建时间、修改时间等。

minf 则更加关键,它详细描述了媒体数据的格式。以视频轨道为例,minf 中的 vmhd(Video Media Header Box)会说明视频的图形模式、不透明度等属性;而 dinf(Data Information Box)则指向实际存储视频数据的位置,它包含了 stbl(Sample Table Box),stbl 是一个非常核心的子结构,它记录了每一个视频帧(样本)在文件中的偏移位置、样本的时长、样本的大小等信息。播放器正是通过这些信息,能够精准地定位到每一帧视频数据,进行解码和播放。

对于音频轨道,minf 中的音频相关子原子会说明音频的采样率、声道数、样本格式等信息,同样通过 stbl 来定位音频样本在文件中的位置,确保音频能够准确播放。

mdia(Media Box)进一步拆解为多个子结构:

  • mdhd:媒体时间信息:记录媒体的创建 / 修改时间、时间尺度(可能与 mvhd 不同,用于单独控制轨道时间,要注意Time scale,我们在计算时间戳的时候都要使⽤该Time scale,对应我们流⾥⾯的AVStream->time_base)。

  • minf:媒体格式核心

    • vmhd(视频媒体头):存在于视频轨道中,包含图形模式(如 YUV 4:2:0)、不透明度等属性。

    • smhd(音频媒体头):存在于音频轨道中,定义音频混合模式、声道布局等。

    • stbl(Sample Table Box):stbl包含了媒体流每⼀个sample在⽂件中的offset,pts,duration等信息。想要播放⼀个mp4⽂件,必须根据stbl正确找到每个sample并送给解码器。详细见下文。

    • dinf(数据信息)

  • hdlr(Handler Reference Box):媒体的播放过程信息。

3. stbl:样本索引的 “精密地图”

stbl 是 trak 中最复杂的部分,它如同一个精密的导航系统,记录每个音视频样本的位置和属性:

  • stsd(Sample Description Box):存储样本的格式信息,如视频的编码格式(H.264)、音频的采样率和位深度。对于 H.264 视频,⾥⾯包含了avc1,avc1⾥⾯⼜包含了avcC,avc1包含了视频Width、Height;avcC:包含了视频编码器相关的信息,包括sps、pps等信息。对于音频,包含采样率和位深度,通道数等。

  • stts(Time to Sample Box):建立时间戳与样本的映射关系。例如,若某段视频前 10 帧每帧持续 1 个时间单位,接下来 5 帧每帧持续 2 个时间单位,stts 会记录这些变化。Time-To-Sample的table entry布局如下:

sample count:sample个数,sample duration:sample持续时间,持续时间相同的连续sample可以放到⼀个entry⾥达到节省空间的⽬的。

  • stsc(Sample to Chunk Box):将样本分组为 “数据块(Chunk)”,每个 Chunk 包含多个样本。这有助于播放器批量读取数据,提升效率。

 其table entry布局如下图所示:

First chunk:使⽤该表项的第⼀个chunk序号,Samples per chunk:使⽤该表项的chunk中包含有⼏个sample ,Sample description ID:使⽤该表项的chunk参考的stsd表项序号

  • stsz(Sample Size Box):记录每个样本的大小(字节数),方便播放器计算数据读取长度。

  • stss(Sync Sample Box) :同步sample表,存放关键帧列表,关键帧是为了⽀持随机访问。

  • stco(Chunk Offset Box):存储每个 Chunk 在文件中的偏移位置,是播放器定位数据的核心索引。若采用 64 位偏移(co64 子结构),则可支持超大文件。需要注意,这⾥stco只是指定的每个chunk在⽂件中的偏移位置,并没有给出每个sample在⽂件中的偏移。想要获得每个sample的偏移位置,需要结合 Sample Size box(stsz)和Sample-To-Chunk(stsc) 计算后取得。

上⽂提到通过stco并不能直接获取某个sample的偏移位置,下⾯举例说明如何获取某⼀个pts对应的sample在⽂件中的位置。

1.将pts转换到媒体对应的时间坐标系

2.根据stts计算某个pts对应的sample序号

3.根据stsc计算sample序号存放在哪个chunk中

4.根据stco获取对应chunk在⽂件中的偏移位置

5.根据stsz获取sample在chunk内的偏移位置并加上第4步获取的偏移,计算出sample在⽂件中的偏移

(三)udta内的meta:元数据的 “百宝箱”

meta(Metadata Box)是 moov 容器中的 “百宝箱”,它存储着一些额外的元数据信息,比如视频的版权信息、作者信息、章节信息等。虽然这些信息对于视频的基础播放不是必需的,但它们能为视频增加更多的附加值。

例如,一些视频文件的 meta 中会包含章节信息,这样用户在播放视频时,就能方便地在不同章节之间跳转;版权信息则能明确视频的归属权,保护创作者的权益。

  • ilst(iTunes 元数据):包含标题、艺术家、专辑等信息,常用于音乐视频。
  • hdlr(Handler Reference Box):指定轨道的处理方式(如 “vide” 表示视频轨道,“soun” 表示音频轨道)。

四、MP4 封装格式的优势

(一)良好的兼容性

MP4 格式具有广泛的兼容性,几乎所有的媒体播放器和移动设备都支持它。无论是在 Windows 系统的电脑上用 Windows Media Player 播放,还是在 iPhone 上用自带的视频播放器观看,MP4 文件都能轻松应对。这得益于它的标准化设计,使得各种设备和软件都能按照统一的规则解析和播放 MP4 文件,大大方便了用户在不同设备间分享和播放视频。

(二)高效的压缩与存储

MP4 格式支持多种先进的编码标准,如 H.264、H.265 视频编码和 AAC 音频编码。这些编码标准就像优秀的压缩大师,能在保证视频和音频质量的前提下,大幅减小文件的大小。比如,一部原本体积较大的高清电影,经过 H.264 编码封装成 MP4 格式后,文件大小可能会缩小到原来的几分之一,同时画面质量依然能保持较高水准,既节省了存储空间,又便于在网络上传输。

(三)丰富的媒体支持

MP4 不仅能存储视频和音频数据,还能包含字幕、章节信息、3D 信息等多种媒体元素。以在线学习视频为例,MP4 文件可以同时嵌入视频讲解、老师的声音、课程字幕,甚至还能设置章节标记,方便学习者快速定位到特定的知识点。这种丰富的媒体支持特性,让 MP4 成为一种功能强大的多媒体存储格式。

五、MP4 在实际中的应用场景

(一)在线视频平台

如今,几乎所有的主流在线视频平台,如腾讯视频、爱奇艺、YouTube 等,都将 MP4 作为主要的视频存储和播放格式。这是因为 MP4 格式在兼容性、压缩效率和媒体支持方面的优势,能满足平台对大量视频内容存储、传输和播放的需求。用户在这些平台上观看视频时,流畅的播放体验、清晰的画质和准确的声音,都离不开 MP4 格式的功劳。

(二)移动设备

我们日常使用手机拍摄的照片和视频,很多默认保存为 MP4 格式。这是因为 MP4 格式在移动设备上具有良好的兼容性和高效的存储特性。一方面,MP4 文件较小的体积能节省手机的存储空间;另一方面,无论在手机自带的相册中播放,还是分享到社交媒体上,MP4 格式都能确保视频顺利播放,让我们可以轻松记录和分享生活中的精彩瞬间。

(三)数字媒体创作

在影视制作、动画设计等数字媒体创作领域,MP4 也是常用的格式之一。制作人员可以将各种特效、音频、视频片段等整合封装成 MP4 文件,方便在不同的软件和设备上进行后期编辑、预览和展示。例如,动画工作室在制作动画短片时,各个环节生成的中间文件可能会以 MP4 格式保存,便于团队成员之间共享和协作。

六、MP4 格式的未来展望

随着技术的不断发展,MP4 格式也在持续演进。未来,它将更好地适应高清、超高清视频以及虚拟现实(VR)、增强现实(AR)等新兴媒体技术的需求。例如,在 8K 超高清视频时代,MP4 格式通过与更先进的编码技术结合,能更高效地存储和传输海量的视频数据。同时,在 VR 和 AR 领域,MP4 格式也在不断拓展,以支持 360 度全景视频、多声道音频等特殊媒体元素的封装和播放,为用户带来更加沉浸式的体验。

MP4 封装格式作为数字媒体领域的重要组成部分,凭借其独特的结构和诸多优势,在各个方面都发挥着重要作用。希望通过本文的介绍,你能对 MP4 封装格式有更深入的理解,在日常生活和工作中更好地运用它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/904424.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/904424.shtml
英文地址,请注明出处:http://en.pswp.cn/news/904424.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript性能优化实战:深入探讨性能瓶颈与优化技巧

JavaScript性能优化实战:深入探讨性能瓶颈与优化技巧 引言 在当今快速发展的Web世界中,性能已经成为衡量应用质量的关键指标。随着Web应用复杂度的不断提升,JavaScript作为前端开发的核心语言,其性能优化变得尤为重要。本文旨在全面深入地探讨JavaScript性能优化的各个方…

无忧AI综合插件,可实现图色识别、机器视觉、图像编辑等多种功能

说明: 无忧AI综合插件(vu.dll)是一款功能强大的AI脚本插件,主要用于按键精灵、易语言、Python、C/C等辅助制作工具,具有图像识别、文本识别、键盘鼠标、内存操作、AI视觉等多种功能。 其官网地址 无忧 - AI图色综合插件 http:www.voouer.com/Plugin 功…

数据中台产品功能介绍

在数字化转型浪潮中,数据中台作为企业数据管理与价值挖掘的核心枢纽,整合分散数据资源,构建统一的数据管理与服务体系。本数据中台产品涵盖数据可视化、数据建设、数据治理、数据采集开发和系统管理五大平台,以丰富且强大的功能模…

opencv之图像亮度变换和形态学变换(八)

opencv之图像亮度变换和形态学变换(八) 文章目录 opencv之图像亮度变换和形态学变换(八)一、图像亮度变换1.1 亮度变换1.2 线性变换1.3 直接像素值修改案例 二、形态学变换2.1 核**2.2 腐蚀(Erosion)****2.…

【初阶数据结构】树——二叉树——堆(中)

文章目录 前言 一、堆的概念与结构 二、堆的实现 堆的定义 1.初始化堆 2.堆的销毁 3.堆的插入 3.1向上调整算法 4.堆的判空 5.求有效个数 6.删除堆顶数据 6.1向下调整算法 7.获取栈顶数据 三、完整源码 总结 前言 上篇了解树和二叉树相关的概念,这篇学习一种特殊的…

AM剪辑软件汉化版:简单易用,开启视频创作之旅

在短视频流量时代,视频剪辑已经成为许多人表达自我和记录生活的重要方式。无论是分享日常点滴、制作创意视频还是进行专业内容创作,一款功能强大且操作简便的视频剪辑软件是必不可少的。今天,我们要介绍的 AM剪辑软件汉化版,就是这…

llfc项目分布式服务笔记

一、系统整体架构流程图(简明版) 复制代码 +---------------+ +------------------+ +----------------+ | 客户端 (Client) |--------->| GateServer |----------| StatusServer |<--+ +---------------+ +--------------…

C++如何设计和实现缓存(cache)来减少对后端存储的访问压力

随着数据量的激增和用户对低延迟、高吞吐量需求的不断提升,如何减少系统瓶颈、提升响应速度成为了开发者的核心挑战之一。在这一背景下,缓存(cache)作为一种关键的技术手段,逐渐成为解决性能问题的核心策略。缓存的本质是通过存储频繁访问的数据或计算结果,减少对后端存储…

华为设备端口隔离

端口隔离的理论与配置指南 一、端口隔离的理论 基本概念 端口隔离&#xff08;Port Isolation&#xff09;是一种在交换机上实现的安全功能&#xff0c;用于限制同一VLAN内指定端口间的二层通信。被隔离的端口之间无法直接通信&#xff0c;但可通过上行端口访问公共资源&#…

1688平台商品详情接口开发指南(含Python代码示例)

接口概述 1688开放平台提供的商品详情接口&#xff08;item_get&#xff09;是获取商品核心数据的重要API&#xff0c;开发者可通过该接口获取商品标题、价格、规格参数、图片等详细信息。本文重点解析标题字段的获取方式&#xff0c;并提供完整代码示例。 接口请求参数 基础…

Edge浏览器PDF字体显示错误

Edge浏览器PDF字体显示错误 软件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 专业增强版2021问题描述 在Word中使用多级列表自动编号, 并使用Word软件自带的导出为PDF文件功能, 在Word中显示正常的数字, 在Edge中查看PDF将会出现渲染错误的现象,…

Redis能保证数据不丢失吗之AOF

我们都知道,Redis是一个基于内存的k-v数据库,既然是基于内存的,那么Redis如何保证数据不丢失?以及真的能做到数据的百分百不丢失吗? 为什么Redis数据需要持久化机制? Redis的一个常用场景是缓存,通常缓存丢失的话,我们也可以从数据库中重新找回,那么为什么Redis还需…

Apache POI实现Excel的基本写入、导出操作

目录 一、Apache POI 简介 二、入门案例(写入导出) 三、实际开发过程中的导出操作——&#xff08;将文件下载至客户端浏览器中&#xff09; 一、Apache POI 简介 Apache POI&#xff08;Poor Obfuscation Implementation&#xff09;是 Apache 软件基金会的开源项目&#…

HTTP请求与前端资源未优化的系统性风险与高性能优化方案

目录 前言一、未合并静态资源&#xff1a;HTTP请求的隐形杀手1.1 多文件拆分的代价1.2 合并策略与工具链实践 二、未启用GZIP压缩&#xff1a;传输流量的浪费2.1 文本资源的压缩潜力2.2 服务端配置与压缩算法选择 三、未配置浏览器缓存&#xff1a;重复请求的根源3.1 缓存失效的…

AgentMesh开源多智能体 (Multi-Agent) 平台

AgentMesh 是一个开源的多智能体 (Multi-Agent) 平台&#xff0c;核心目标是解决多个智能体之间的通信和协同问题&#xff0c;真正实现 “11>2” 的效果。能够帮助用户快速创造自己的多智能体团队&#xff0c;或是让已有的多个单一智能体获得协同能力&#xff0c;最终解决更…

基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南

引言&#xff1a;边缘计算赋能智能监控 在AIoT时代&#xff0c;将深度学习模型部署到嵌入式设备已成为行业刚需。本文将手把手指导读者在NVIDIA Jetson Nano&#xff08;4GB版本&#xff09;开发板上&#xff0c;构建基于YOLOv5SORT算法的实时目标跟踪系统&#xff0c;集成无人…

从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 8 |产品化与运维:批量标定、误差监控、OTA 升级与安全防护

Part 8 |产品化与运维:批量标定、误差监控、OTA 升级与安全防护 本章聚焦将嵌入式 Tracker 定位系统推向 量产与运维 阶段,覆盖 批量标定、误差监控、远程 OTA 升级 以及 定位安全防护,确保产品在大规模部署后仍能稳定、精准、可靠地运行。 一、批量标定平台搭建 标定流程…

gsplat 渲染库 安装部署笔记

目录 Windows 安装 Nvdiffrast安装 gsplat安装成功笔记: cu118测试ok vs 编译安装报错: 安装命令: 报错结果: Windows 安装 pip install gsplat 安装成功,调用报错: python -c "from gsplat import csrc as _C" Traceback (most recent call last): …

Java二维码学习

使用Java语言生成二维码有以下方式,一是谷歌的zxing,二是基于zxing实现的qrcode开源项目,三是基于zxing实现的qrgen开源项目 一 zxing 谷歌的zxing技术生成二维码,是MultiFormatWriter多写格式书写器生成BitMatrix位矩阵,然后将位矩阵的信息在BufferedImage中设置二维码…

工业质检/缺陷检测领域最新顶会期刊论文收集整理 | AAAI 2025【持续更新中】

会议官方论文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 其中&#xff0c;2025年是第三十九届AAAI人工智能大会&#xff0c;主要对第三十九届相关论文进行梳理&#xff0c;当前已初版28期(volume 39 no. 28) 【Attention】 虽然本文主要面向的领域…