MP4简介

MP4文件简介 首先了解以下几个概念:下图为主要的box:MP4infoMP4info-C++文档类资源-优快云下载MP4info更多下载资源、学习资料请访问优快云下载频道.https://download.youkuaiyun.com/download/wzz953200463/86033110使用MP4info工具打开任意一个MP4文件,如下图所示。3.1moov容器至少包含以下3种中的一种:也可以包含其他容器信息,例如:一个或几个trakAtom(trak)、User Data Atom(udta)等。trak中定义了媒体文 阅读详情

声明:

    在我的工作中需要查看一些关于MP4格式的问题,所以对MP4进行了简单的了解,这里对这部分知识做个简单的总结,但是文中主要是参考mp4文件格式解析,这里进行说明,同时我也使用了一些自己工作中的例子作讲解,希望可以对你有所帮助。

 

参考文章:

FFmpeg中mp4的demuxer(mov.c)代码阅读 : https://www.jianshu.com/p/f78defe0e485

介绍MP4格式的文章:

mp4文件格式解析 : https://www.jianshu.com/p/529c3729f357

多媒体文件格式之MP4 : https://www.cnblogs.com/tocy/p/media_container_3_mp4.html

Android音视频系列:视频容器操作篇 -- mp4容器打包实现 : https://mp.weixin.qq.com/s/BOkaNcPQWKkeAS1it3aE-w

 

软件推荐:Mp4Explorer

    一个非常友好,可以很清楚的将MP4各种需要的信息使用表格的方式例举出来的软件,界面为:

 

 

封装格式重要概念

1 box

mp4文件由若干个box组成。下面是box结构的一个示意图。

 

  • box由header和body组成,其中header指明box的size和type。size是包含box header的整个box的大小。
  • box type,通常是4个ASCII码的字符如“ftyp”、“moov”等,这些box type都是已经预定义好的,表示固定的含义。如果是“uuid”,表示该box为用户自定义扩展类型,如果box type是未定义的,应该将其忽略。
  • 如果header中的size为1,则表示box长度需要更多的bits位来描述,在后面会有一个64bits位的largesize用来描述box的长度。如果size为0,表示该box为文件的最后一个box,文件结尾(同样只存在于“mdat”类型的box中)。

 

2 track

一些sample的集合,对于媒体数据来说,track表示一个视频或者音频序列。

3 sample

video sample即为一帧或者一组连续视频帧,audio sample即为一段连续的音频。

4. sample table

指明sample时序和物理布局的表。

5. chunk

一个track的几个sample组成的单元。

    mp4文件中,媒体内容在moov的box中。一个moov包含多个track。每个track就是一个随时间变化的媒体序列,track里的每个时间单位是一个sample,sample按照时间顺序排列。注意,一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。

    sample是媒体数据存储的单位,存储在media的chunk中,chunk和sample的长度均可互不相同,如下图所示。

 

 

重要box介绍:

 

 

实例分析:

 

    上图是我之前分析的一个MP4 文件的结构图,在这个文件中音频和视频是间隔放置的,其中红色的为音频,蓝色的为视频。而在每个音视频块中有其对应的偏移量(pos),也就是他们在文件中的位置。而在pos左右两边为音视频的dts值(通过dts可以实现音视频的同步播放)。而再往两边对应的数据为音视频中每个chunk的偏移量(STCO)。chunk是由一个或者多个sample组成,如粉框中多个sample对应一个chunk。而在最左边和最右边是每个音视频的sample的大小(STSZ),我们可以通过偏移量和每个sample的大小来计算出每个chunk的大小以及他在文件中所在的位置。因此我们了解MP4文件的时候通常需要结合STCO表和STSZ表来了解MP4的组成结构。

    但是我们在了解了MP4音视频位置信息后不一定知道他是不是可以正常的播放,因为在播放器中,音视频的同步播放是要通过很多的信息来实现的,例如在视频播放之前我们需要知道一些信息来对播放器做初始化设置:

audio信息:

  1. smplrate:sample rate(采样率)。
  2. channel:通道个数。
  3. bitrate:比特率。
  4. audiosamplenum:音频sample的个数。
  5. 采样位数
  6. 音频格式

 

video信息:

  1. width、height:视频的宽/高。
  2. bitrate:比特率(码率),秒为单位。等于视频总的大小/时长。
  3. frames:视频帧数。
  4. fps:帧率(frame per second)。
  5. total_time:时间长度,ms为单位。等于duration/timescale。
  6. timescale:时间的粒度,1000表示1000个单位为1s。
  7. duration:时间粒度的个数。
  8. videosamplenum:视频sample的个数。

 

    在上面列举了对于音视频来说十分重要的参数,而这些参数就是通过解析moov中各个box获得的。可以通过参考上面重要box中的各个参数的说明来了解各个参数在哪个box中:

 

 

播放器中如何实现音视频同步:

    通过解析moov中各个box获得需要的参数对播放器进行初始化,之后就需要获得真正的音视频数据来做同步播放了,我们可以想象音视频为两队排队进入民政的情侣,他们只有一一对应好才能跟自己的女朋友结婚,否则就容易出现错误。而对于音视频来说也是这样的,只有dts相同的数据写入到播放器中才可以音视频同步播放。

    现在我们想一下,民政局其实是有窗口限制的,只能同时给一定数量的情侣办理结婚,办完一对走一对,接着办下一对。 这里我们认为这个民政局同时可以为10对情侣办理业务,也就是说播放器最多只能接受20个音频或者视频。如果不消耗用来显示输出而是让他们等待就会出问题。

    我们知道音视频的存放方式为:一段音频一段视频,依次交替。而回到我们的例子中就是男生和女生是分开排队的,一队男生一队女生,依次交替。现在他们需要进入民政局办理结婚了,我们理想的情况下是,一队男生进来后没有坐满民政局的窗口,这个时候一队女生来了,他们找到自己的男朋友,办理完手续就走了,由下一对接着办理。而对应在播放器中就是读入一段音频,这个时候内存还允许,继续读一段视频,音视频同步输出后,释放内存让后面的音视频使用。

    但是有的时候是有意外存在的,那就是这一队的男生超出了20个人,来了21个人,这个时候后面进来的不是女生,不能办理结婚,出现这个问题就需要民政局的办事人员去问在一号窗口的男生,“你的女朋友是谁啊,她在什么位置啊,我给你带过来”,这样你们办理完后面就好办理了。而这个过程相对于正常的流程来说需要民政局的人帮忙去后面找自己的女票是十分繁琐的事情。

    而对应到播放器中就是当音频的数据读满buffer的时候,这个时候还没有视频数据到来(或者视频数据读满buffer,而音频数据没有到来),播放器就需要去找此时排在最前面的音频对应dts的视频,这样就可以将他们写入播放器,从而释放音频的内存来存放其他的数据。而找视频的这个过程就需要使用到seek的操作。当从网络读取数据时,就需要使用HTTP去GET请求视频所有的位置,之后从这个位置开始读取数据。而通常上面这样的操作是十分繁琐的,也影响视频的下载。

    针对上面这种排序有问题的文件的一个修改办法就是加大buffer。这样可以接收更多的音视频,从而更容易做同步。

Go实战--golang实现MP4视频文件服务器(nareix/joy4) 生命不止,继续 go go go !!!有点忙,有点懈怠,继续。关于golang实现的静态文件服务器之前有写过: Go实战–golang实现静态文件服务器(文件查看,文件上传,文件下载)正好,最近在做视频方面的东西,那么先来个简单的,实现一个提供mp4视频文件的服务器吧,并且通过浏览器访问播放。MP4文件服务器package mainimport ( "log" "net/http 阅读详情

相关推荐

LaTeX伪代码字体大小调整全攻略:从algorithm到algorithm2e的实战技巧

本文详细介绍了在LaTeX中调整伪代码字体大小的全面技巧,涵盖algorithm、algorithmicx和algorithm2e等主流算法包的使用方法。从基础命令到高级配置,帮助用户解决学术论文和技术文档中的伪代码排版问题,提升算法展示的专业性和可读性。特别针对不同期刊格式要求,提供了实用的字体调整方案。

weixin_29297127的博客 437

MP4 封装格式详解

MP4 封装格式详解

ProgramNovice的博客 4825

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4592

一文读懂MP4封装格式

MP4或称MPEG-4第14部分(MPEG-4 Part 14)是一种标准的数字多媒体容器格式。扩展名为.mp4。虽然被官方标准定义的唯一扩展名是.mp4.mp4.m4a大部分数据可以通过专用数据流嵌入到MP4文件中,因此MP4文件中包含了一个单独的用于存储流信息的轨道。

苦逼的程序猿☺ 5705

要配置西门子G120XA变频器实现**端子启停**和**Modbus RTU(485)频率给定

如有问题,可通过STARTER软件在线诊断Modbus通讯状态。要配置西门子G120AX变频器实现。

微:13763355074 4849

Latext安装(二)WinEdt安装+激活教程

常用的LaTeX安装方案是TeXLive + WinEdt。TeXLive 是LaTeX的运行环境,而 WinEdt 则是编写LaTeX文档的编辑器。安装好TexLive之后,再安装WinEdt。这里介绍的是WinEdt的安装和激活教程。

j_l_sheng的博客 4万+

MP4文件结构解析

文章目录MP4相关文档MP4分析工具术语和缩略语Mp4文件的组织结构Box对象结构FullBox对象结构常见的BoxFile Type BoxMovie 结构Movie BoxMovie Header BoxTrack BoxTrack Header BoxMedia BoxMedia Header BoxHandler Reference Box : 'hdlr'Media Informatio...

SuperLi 1万+

SoC芯片时钟树优化实战:如何用分段CTS解决DDRPHY与Memory Controller的时序难题

本文深入探讨了SoC芯片时钟树优化中的分段CTS技术,重点解决DDRPHY与Memory Controller之间的时序难题。通过分析多域时钟架构的复杂性,提出三级分段CTS策略,并结合28nm移动SoC实战案例,展示如何通过Guide Buffer插入和本地段重构实现72%的跨域偏差改善。文章还涵盖5nm以下工艺的线阻变异、热梯度效应等特殊考量,为数字IC设计提供时钟树综合的高阶解决方案。

kkk56的博客 905

MP4文件格式入门

什么是MP4 首先,介绍下封装格式。多媒体封装格式(也叫容器格式),是指按照一定的规则,将视频数据、音频数据等,放到一个文件中。常见的 MKV、AVI 以及本文介绍的 MP4 等,都是封装格式。 MP4是最常见的封装格式之一,因为其跨平台的特性而得到广泛应用。MP4文件的后缀为.mp4,基本上主流的播放器、浏览器都支持MP4格式。 MP4文件的格式主要由 MPEG-4 Part 12、MPEG-4 Part 14 两部分进行定义。其中,MPEG-4 Part 12 定义了ISO基础媒体文件格式,用来存储基

More_Action的博客 2549

Halcon: 获取仿射矩形-rectangle2的四个顶点、四条边的中点

Halcon 工业应用实用教程中的一个例子: * CenterY : 仿射矩形中心y * CenterX: 仿射矩形中心x * Phi: 仿射矩形角度 * Len1: 仿射矩形宽的一半 * Len2: 仿射矩形高的一半 * CornerY: 仿射矩形端点y * CornerX: 仿射矩形端点x * LineCenterY: 仿射矩形边中点y * LineCenterx: 仿射矩形边中点x * 矩...

ruotianxia的博客 8572

AD快速上手笔记

本文详细介绍了使用Altium Designer从零创建PCB项目全流程:新建工程、绘制原理图(元件放置、连线、电源端口)、编译检查、生成PCB、布局布线(含铺铜)、DRC检查及输出Gerber与钻孔文件。重点强调了库选择、参数修改、层切换、铺铜设置和生产文件导出规范,确保设计无误,便于顺利下单生产。

qq_53529450的博客 42

MP4文件格式简要解析

MP4文件格式简要解析

源码在手 1万+

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2439

MP4封装格式简介

视频封装格式是指视频数据如何存储的,视频编码格式是指原始视频数据如何编码为二进制数据码流。编码后的视频数据最终通过视频封装格式存储为视频文件。 本文对视频封装格式MP4做一些介绍...

sdsszk的博客 6471

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

QuickTime MP4 3GP 简介

QuickTime简介Apple公司的QuickTime于1991年登台亮相,是Apple公司面向专业视频编辑、Web网站创建和CD-ROM内容制作领域开发的多媒体技术平台,QuickTime支持几乎所有主流的个人计算平台,是数字媒体领域事实上的工业标准,是创建3D动画、实时效果、虚拟现实、A/V和其他数字流媒体的重要基础。 QTVR是QuickTime Virtual Rea

flyingqr的专栏 2213

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MP4文件格式1——MP4简介

MP4也指MPEG-4 Part14,其常用于储存视频和音频,也可以保存字母等信息;官网的后缀名称.mp4,其它常用的后缀民称有.m4a(音频,一般是AAC LC的压缩编码)和.m4p。   MPEG-4 Part 14其实是起源于apple的QuickTimeFile Format格式,其主要原理就是将数据封装在一个一个Atom中,数据说明信息封装在文件头部或者文件尾部,这样便于网络传输。

abamon的专栏 1981

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MP4之文件格式简介

简单来说,MP4文件是由一个一个的box组成的,box中可以包含子box。MP4的box类型很多,还好大部分文件并不会包含所有的box,对于音视频播放来说,很多box也是可以忽略的。从这里可以查到所有boxhttp://mp4ra.org/atoms.html box 一个MP4文件中,主要需要了解的是存储音视频的metadata和音视频数据的box,metadata主要在moov box,音视频...

weixin_34331102的博客 153

MP4,avi播放器(delphi开发源码)简介

MP4,avi播放器(delphi开发源码)简介 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了使用Delphi语言开发的MP4和AVI格式播放器的源代码。该源码适用于有一定编程基础的朋友学习和研究,如您对Delphi编程感兴趣,或者需要一款简单的播放器源码作为参考,可以下载使用。 特点 支持MP4和AVI格式文件的播放 采用Delphi语言开发,易于理解和二次开...

gitblog_06745的博客 420

MP4文件格式协议简介+JAVA 处理

表示一些sample的集合,对于媒体数据而言就是一个视频序列或者音频序列,我们常说的音频轨和视频轨可以对照到这个概念上。这个概念起源于QuickTime中的atom,也就是说MP4文件就是由一个个Box组成的,可以将其理解为一个数据块,它由Header+Data组成,Data 可以存储媒体元数据和实际的音视频码流数据。简单理解为采样,对于视频可以理解为一帧数据,音频一帧数据就是一段固定时间的音频数据,可以由多个Sample数据组成,简而言之:存储媒体数据的单位是sample。

IT匠人的博客 449

【正点原子MP157连载】第二章 STM32MP1简介-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-318813-1-1.html 4)正点原子官方B站:https://space.bilibili.com/394620890 5)正点原子STM32MP157技术交流群:691905614 第二章 STM32MP1简介 本章,我们将向大家

weixin_55796564的博客 4179

嵌入式Linux下MP4视频录制库MP4V2移植和简介

*************************************************************************************************************************** 作者:EasyWave                                                                

YUAN1125的专栏 3000

FFmpeg从入门到入魔(3):提取MP4中的H.264和AAC

最近在开发中遇到了一个问题,即无法提取到MP4中H264流的关键帧进行处理,且保存到本地的AAC音频也无法正常播放。经过调试分析发现,这是由于解封装MP4得到的H264和AAC是ES流,它们缺失解码时必要的起始码/SPS/PPS和adts头。1. MP4格式解析1.1 MP4简介MP4封装格式是基于格式定义,,目前被广泛应用于封装h.264视频和aac音频,是高清视频/HDV的代表。

irainsa的博客 2195

【免费下载】 视频修复软件(MP4格式修复工具)

视频修复软件(MP4格式修复工具) 【下载地址】视频修复软件MP4格式修复工具 本仓库提供了一款专门用于修复损坏的MP4格式视频文件的软件。该软件经过测试,能够有效修复因录制过程中断电等原因导致的视频损坏问题 项目地址: http...

gitblog_09716的博客 600

视频转mp4格式转换器如何把其他格式的视频转换成mp4格式

冬天到了,很多人都放弃出去游玩的念头。而选择宅在家里开启冬眠模式。这时很多人无聊时就会选择追剧,追剧是最容易打发时间的娱乐方式之一。最近朋友就遇到一个棘手的问题,他用腾讯视频下载了一个电视,但是导入到手机后却由于格式不对无法播放。所以想知道如何把其他格式的视频转换成mp4格式。小编接下来就给大家介绍一个视频转mp4格式转换器,以下是它的操...

weixin_33834679的博客 650
上一篇: Wireshark -IO图表获得各个信息的对比
下一篇: apk使用本地代理接收媒体流
moxue10
博客等级 码龄19年 388粉丝 85原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值