MP4文件格式介绍及解析程序(上)

平时我们下载好了视频文件进行浏览时,常常会注意到它们文件的后缀名。常见的后缀有.mp4、.avi、.flv、.wmv、.rmvb等。这里的后缀名其实指的是视频数据和音频数据的封装格式。视频数据与音频数据要存储在一个文件中,需要以一定的存储格式进行规范。MP4就是常用的一种视频文件格式。

视频播放器的原理

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示
在这里插入图片描述
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

常见的封装格式比较

在这里插入图片描述MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都不在话下,不过我们常见的大部分的MP4文件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。举个例子,用VLC media player打开两个本地MP4文件查看它们的编码信息如下图:

在这里插入图片描述由上图我们可以看到MP4封装的视频流和音频流的媒体信息,其中2.mp4的视频编码格式是H.264(H.264又称MPEG-part10、MPEG-4 AVC),3.mp4的视频编码格式是MPEG-4。两个MP4文件的音频编码格式都是AAC。除此之外还描述了视频的宽高,帧率,音频的采样率,比特率等信息。

MP4文件格式解析

mp4文件是用来存储视频数据和音频数据的。视频要想实现播放功能,除了原始的色度和亮度数据以外,还需要以下等数据。
audio信息:
smplrate:sample rate(采样率)。
channel:通道个数。
bitrate:比特率。
audiosamplenum:音频sample的个数。

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

这些数据在MP4文件格式中如何存储、区别呢。我们可以借用MP4解析工具MP4 Reader解析一段MP4文件用来举例:

在这里插入图片描述如上图,MP4文件由许多box组成,每个box包含不同的信息, 这些box以树形结构的方式组织。box里能嵌套多层box。第一层box有ftyp,moov,free,mdat四类,我们需要的视音频原始数据存储在mdat box下,而相关的配置信息数据存储在moov box下,moov box下的子box还为我们提供了视音频原始数据在mdat box下存储的位置。

参考:CSDN雷霄骅的博客:https://blog.csdn.net/leixiaohua1020/article/details/18893769
简书 smallest_one的文章:https://www.jianshu.com/p/529c3729f357

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值