IOS 基础媒体文件格式语法描述和语意(MP4文件格式分析实例)

2024-03-20 23:48

本文主要是介绍IOS 基础媒体文件格式语法描述和语意(MP4文件格式分析实例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本对象 Box

Boxes start with a header which gives both size and type. 

在最前面Box 包含 size和type,size和type都是占4个字节。


The header permits compact or extended size (32or 64 bits) and compact or extended types (32 bits or full Universal Unique IDentifiers, i.e. UUIDs). 

允许根据需要,将size 简化或者扩展,同样的,对于type 也可以根据需要进行简化或者扩展。

简化,即使用32位的 size 和type. 扩展,即使用64位的size 和type.


The standard boxes all use compact types (32-bit) and most boxes will use the compact (32-bit) size. 

标准的box 使用简化的type,即32位的,大多数box一般也都使用简化的 32位的 size。


Typicallyonly the Media Data Box(es) need the 64-bit size.

但是 Media Data Box 需要使用64位的size.


The size is the entire size of the box, including the size and type header, fields, and all contained boxes.  

size指的是整个Box的大小,包括头部的 size和type 的大小,以及后面的值和所有的包含的其他box .

 
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;
}}

二、扩展对象

扩展对象继承了 Box,并在此基础上增加了 version和 flages.

 
aligned(8) class FullBox(unsigned int(32) boxtype, unsigned int(8) v, bit(24) f) extends Box(boxtype) {
unsigned int(8) version = v;
bit(24) flags = f;
}


三、构建文件对象


1、File Type Box 

 
aligned(8) class FileTypeBoxextends Box(‘ftyp’) {unsigned int(32) major_brand;unsigned int(32) minor_version;unsigned int(32) compatible_brands[]; // to end of the box
}


计算一下FileTypeBox的大小:

size占32位,4个字节;

type占32位,4个字节;

major_brand占32位,4个字节;

minor_version占32位,4个字节;

compatible_brands 每个brand占32位,4个字节;



2、Free Space Box 

 
aligned(8) class FreeSpaceBox extends Box('free') { 
    unsigned int(8) data[];
}

计算一下Free Space Box的大小:

size占32位,4个字节;

type占32位,4个字节;

每个 data 占8位,1个字节;


3、Media Data Box


aligned(8) class MediaDataBox extends Box(‘mdat’) { 

bit(8) data[];

}

计算一下Media Data Box的大小:

size占32位,4个字节;

type占32位,4个字节;

每个 data 占8位,1个字节;







4、 Movie Box 

aligned(8) class MovieBox extends Box(‘moov’){


计算一下Movie Box 的大小:

size占32位,4个字节;

type占32位,4个字节;




5、uuid

以上分析了通过一个mp4文件,分析了mp4文件格式顶级box的大小 size 、类型 type 以及相邻box的定位。



下面说一下,uuid.
根据基本对象 Box 的定义,如果
boxtype==‘uuid’
那么在type后面要包含 16个字节的 扩展类型。
扩展类型之后才是数据。



关于顶级box内部的子box的情况还没有做出说明,在下一篇文章会继续。

<EOF>

这篇关于IOS 基础媒体文件格式语法描述和语意(MP4文件格式分析实例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列