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(全部大约70多个),在很大程度上增加了解析的复杂性。如果要全部解析必要性不是很大。大部分mp4文件没有那么多的box类型,下图就是一个简化了的,常见的mp4文件结构:

下图是节点box详细说明:

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

1. 一级box

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

1.1 ftyp box

结构:

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

运行结果:

1.2 moov box

结构:

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

1.3 free box

结构:

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

1.4 mdat box

结构:

字段名称 长度(bytes) 有关描述
boxsize 4 box的长度
boxtype 4 box的类型
     后面是真实媒体数据

运行结果:

2. 二级box

  本节所说的二级box皆为moov的子box,主要包含mvhd、trak、udat等等。

1.1 mvhd box

结构:

字段名称 长度(bytes) 有关描述
boxsize 4 box的长度
boxtype 4 box的类型
major_brand 4  
minor_version 4 版本号
compatible_brands 4*N 本文件遵从的多种协议(ismo,iso2,mp41)
时间: 2024-08-29 08:41:01

MP4文件格式分析(附源码)的相关文章

leaflet 结合 d3.js 实现 geojson 数据地形剖面分析(附源码下载)

前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet 的插件库,非常有用 内容概览 leaflet 实现地形剖面分析源代码 demo 下载 本篇 demo 利用 leaflet api 实现地形剖面分析,效果图如下: 完整demo源码见小专栏文章尾部:GIS之家leaflet小专栏 文章尾部提供源代码下载,对本专栏感兴趣的话,可以关注一波 原文地址:h

AWStats 日志分析(附源码包)

简介:AWStats软件是一个免费的强大的服务器的日志文件分析工具,显示你所有的网页/邮件/FTP统计包括访问,访问者,页面,点击,高峰时间,操作系统,浏览器,搜索引擎,关键字,机器人访问,断开的链接和更多的阻力截图排序.特点:Awstats是在SourceForge上发展很快的一个基于Perl的WEB日志分析工具,一个充分的日志分析让Awstats显示您下列资料: 访问量,访问次数,页面浏览量,点击数,数据流量等 精确到每月.每日.每小时的数据 访问者国家 访问者IP Robots/Spide

Code First Entity Framework 6化被动为主动之explicit loading模式实战分析( 附源码)

在使用Entity Framework加载关联实体时,可以有三种方式: 1.懒加载(lazy Loading); 2.贪婪加载(eager loading); 3.显示加载(explicit loading). EF默认使用的是懒加载(lazy Loading).一切由EF自动处理. 这种方式会导致应用程序多次连接数据库,这种情况推荐在数据量较大的情况下使用.当我们需要加载数据较少时,一次性全部加载数据会相对更高效. 我们来看看EF的显示加载(explicit loading)如何让我们完全掌控

Java设计模式-代理模式之动态代理(附源码分析)

Java设计模式-代理模式之动态代理(附源码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的区别就是:动态代理是在运行时刻动态的创建出代理类及其对象.上篇中的静态代理是在编译的时候就确定了代理类具体类型,如果有多个类需要代理,那么就得创建多个.还有一点,如果Subject中新增了一个方法,那么对应的实现接口的类中也要相应的实习该方法,不符合设计模式原则. 动态代理的做法:在运行时刻,可以动态创建出一个实现了多个接口的代理类.每个代理类的对象都会关联一个表示内部处理

C#编程总结(七)数据加密——附源码

C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取.阅读的目的. 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程.加密建立在对信息进行数学编码和解码的基础上.加密类型分为两种,对称加密与非对称加密,对称加密双方采用共同密钥.非对称加密,这种加密方式存在两个密钥,一个是公共密钥(对外公开),一种

ANDROID自定义视图——仿瀑布布局(附源码)

简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3.绘制--onDraw():如何绘制这个View. 第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到1,2两个步骤就中好了. 第一步的测量,可以参考:(ANDROID自定义视图--onMeasure,MeasureSpec源码 流程 思路详解) 第二步的布局,可以参考:(AN

Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)

最近反复研究日常经典必用的几个android app,从主界面带来的交互方式入手进行分析,我将其大致分为三类.今天记录第一种方式,即主界面下面有几个tab页,最上端是标题栏,tab页和tab页之间不是通过滑动切换的,而是通过点击切换tab页.早期这种架构一直是使用tabhost+activitygroup来使用,随着fragment的出现及google官方也大力推荐使用fragment,后者大有代替前者之势.本文也使用fragment进行搭建,标题中的"经典"指这种交互经典,非本文的代

Qt Quick 图像处理实例之美图秀秀(附源码下载)

在<Qt Quick 之 QML 与 C++ 混合编程详解>一文中我们讲解了 QML 与 C++ 混合编程的方方面面的内容,这次我们通过一个图像处理应用,再来看一下 QML 与 C++ 混合编程的威力,同时也为诸君揭开美图秀秀.魔拍之类的相片美化应用的底层原理. 项目的创建过程请参考<Qt Quick 之 Hello World 图文详解>,项目名称为 imageProcessor ,创建完成后需要添加两个文件: imageProcessor.h 和 imageProcessor.

WPF一步步实现完全无边框自定义Window(附源码)

原文:WPF一步步实现完全无边框自定义Window(附源码) 在我们设计一个软件的时候,有很多时候我们需要按照美工的设计来重新设计整个版面,这当然包括主窗体,因为WPF为我们提供了强大的模板的特性,这就为我们自定义各种空间提供了可能性,这篇博客主要用来介绍如何自定义自己的Window,在介绍整个写作思路之前,我们来看看最终的效果. 图一 自定义窗体主界面 这里面的核心就是重写Window的Template,针对整个开发过程中出现的问题我们再来一步步去剖析,首先要看看我们定义好的样式 <Resou