MP4音视频格式

news2025/4/1 23:20:24

1.MP4

MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式,是MPEG-4系列的成员之一

2.文件结构

MP4由一层层的嵌套Box(atom)组成

[ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ]

在这里插入图片描述

3.常见Box

类型名称描述
加粗样式ftypFile Type
moovMovie Box视频元数据(时长、轨道、帧率等)
mdatMedia Data Box真正的视频/音频数据
mvhdMovie Header在 moov 中,记录全局时长、时间基等
trakTrack Box每个音视频轨道的容器(如 video、audio)
tkhdTrack Header描述轨道的基本信息(id、宽高等)
mdiaMedia Box媒体信息容器
minfMedia Information媒体详细信息,如音频格式、视频帧率等
stblSample Table每帧的偏移、大小、时间戳信息
moofMovie Fragment流式播放中分片播放时的元数据(fragmented MP4 用)
free / skipPadding Box空的填充区域,无实际内容

4.常见box介绍

1.ftyp box

告知视频播放器/编辑器等MP4的格式和兼容标准

[ size ][ type ][ major_brand ][ minor_version ][ compatible_brands… ]

字段名大小说明
size4 字节总长度(含 header)
type4 字节Box 类型,值为 ftyp
major_brand4 字节主标识,例如 isom, mp41, mp42
minor_version4 字节小版本号
compatible_brandsN 字节一个或多个 4 字节字符串,表示兼容的播放环境

2.moov box

定义一个MP4文件中的数据信息,类型是moov,包含

mvhd标签:Move Header Atom,存放为压缩过的影片信息头容器
cmov标签:Compressed Movie Atom,压缩过的电影信息容器
rmra标签:Reference Movie Atom, 参考电影信息容器

3.track box

track容器定义了媒体文件中的一个track信息,一个媒体文件中可以包含多个track,每个track之间互相独立,具有自己的时间和空间占用信息。主要用于
包含媒体数据的引用和描述
包含modifier track信息
流媒体协议的打包信息

字段长度说明
size4字节描述atom大小
类型4字节tkhd,mdia,clip,matt等

3.tkhd box

字段长度/字节描述
尺寸4这个 Atom 的字节数
类型4tkhd
版本1这个 Atom 的版本
标志3有效的标志分别如下:
• 0x0001:track 生效
• 0x0002:track 被用于 Movie 预览中
• 0x0004:track 被用于 Movie 的 Poster 中
生成时间4Movie Atom 的起始时间(基准时间是 1904-1-1 0:00 AM)
修改时间4Movie Atom 的修订时间(基准时间是 1904-1-1 0:00 AM)
Track ID4唯一标志该 track 的一个非零值
保留4这里为 0
Duration4track 的 Duration,在电影的时间戳中。与 track 的 edts list 进行的时间戳会建立关联,然后进行时间戳计算,得到对应的 track 的播放时间坐标
保留8这里为 0
Layer2视频层,默认为 0,值小的在上层
Alternate group2track 分组信息,默认为 0,表示该 track 未与其他 track 有群组关系
音量2播放此 track 的音量。1.0 为正常音量
保留2这里为 0
矩阵结构36该矩阵定义了此 track 中两个坐标空间的映射关系

4.hdlr box

描述媒体流的播放过程

字段长度 / 字节描述
尺寸4这个 Atom 的字节数
类型4hdlr
版本1这个 Atom 的版本
标志3这里为 0
Handle 的类型4handler 的类型。当前只有两种类型:
mhlr:media handlers
dhlr:data handlers
Handle 的子类型4media handler 或 data handler 的类型。
如果 component type 是 mhlr,那么这个字段定义的是媒体数据类型,如:
vide:video 数据
soun:sound 数据
如果 component type 是 dhlr,那么这个字段定义的是数据引用类型,如:
alis:文件的别名
保留12保留字段,默认为 0
Component name可变这个 component 的名字,也就是生成此 media 的 media handler。该字段的长度可以为 0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内GitHub镜像源全解析:加速访问与替代方案指南

在数字化开发日益普及的今天,GitHub作为全球最大的代码托管平台,已成为开发者不可或缺的资源库。然而,由于网络环境的限制,国内用户在访问GitHub时常常面临速度慢、连接不稳定等问题。为了提升开发效率,国内涌现出多个GitHub镜像源,为开发者提供了快速、稳定的代码克隆与…

Vue3动态加载组件,警告:Vue received a Component than was made a reactive object

场景 2个按钮,点击之后,下面加载不同的组件。 现象 分析 实际动态加载的组件,不是深层响应式的,推荐使用 shallowReactive 或 shallowRef,即浅层作用形式,仅最外层是响应式,以此来提升性能。…

【源码阅读/Vue Flask前后端】简历数据查询功能

目录 一、Flask后端部分modelServiceroute 二、Vue前端部分index.js main.vue功能界面templatescriptstyle 一般就是三个层面,model层面用来建立数据库的字段,service用来对model进行操作,写一些数据库操作的代码,route就是具体的…

Vue背景介绍+声明式渲染+数据响应式

一、Vue背景 1. 为什么学Vue 1.前后端开发就业必备技能 2.岗位多,绝⼤互联⽹公司都在使⽤Vue,还可以助⼒SpringBoot、C等项⽬开发 3.提⾼开发效率 更少的时间,干更多的活,提高项目开发速度 原生JS做法 Vue做法 总而言之: 使用Vue能够赋能、提升就业竞争…

HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具

应用场景 在鸿蒙开发中,我们在很多时候调试代码都需要用到日志打印工具,但无论是hilog还是console.log,都用起来相对麻烦,而且需要手动将对象转换为JSON字符串的方式才能打印,并且在控制台日志中输出的格式也非常丑。所以下面我们…

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中,合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF,不仅能够更方便地进行管理,还能在特定场景下(如批量打印)提高效率。那么,当我们需要批量合并多个 PDF 文件时,是否有…

rbpf虚拟机-汇编和反汇编器

文章目录 一、概述二、主要功能三、关键函数解析3.1 汇编器3.1.1 parse -转换为Instruction列表3.1.2 assemble_internal-转换为Insn 3.2 反汇编器3.2.1 to_insn_vec-转换为机器指令 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-汇编和反汇编器] ❤…

虚拟现实--->unity学习

前言:这学期劳动课选了虚拟现实,其中老师算挺认真的,当然对一些不感兴趣的同学来说是一种折磨,我对这个unity的学习以及后续的虚幻引擎刚开始连基础的概念都没有,后面渐渐也是滋生了一些兴趣,用这篇博客记录…

一文详解QT环境搭建:ubuntu20.4安装配置Qt5

随着软件开发技术的不断进步,跨平台应用程序的需求日益增长,开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架,在这方面提供了卓越的支持,不仅简化了GUI应用程序的创建过程&#…

【IDEA的个性化配置】

目录: 一:隐藏项目路径二:禁用斜体注释三:重新Maven构建未完待续... 一:隐藏项目路径 😊在IDEA左侧的Project目录中,项目名称后面显示了项目的文件路径地址,如果不喜欢可以隐藏&…

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题(Topic)​分区(Partition)​生产者(Producer)​消费者(Consumer)​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景 其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多&#x…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程,这些作业由Microsoft SQL Server中的SQL Server代理管理,对于自动执行日常任务(如数据库系统中的备份、数据导入和报告生成)以及确保及时准确地处理和更新数据…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中,bucket 是一个重要的概念…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[操作系统,学习记录]3.进程(2)

1.fork(); 玩法一&#xff1a;通过返回值if&#xff0c;else去执行不同的代码片段 玩法二&#xff1a;if&#xff0c;else然后调用execve函数去执行新的程序 2.进程终止&#xff1a; 退出码&#xff0c;子进程通过exit/return返回&#xff0c;父进程wait/waitpid等待而得&am…