一、视频播放器原理
视音频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。
视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示:
解协议
的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如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数据。
视音频同步
的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
二、相关知识点
1、帧率
是用于测量显示帧数的量度。所谓的测量单位为每秒显示的帧数。每秒显示帧数或者帧率表示图形处理器处理场时每秒能够更新的次数。30fps就是可以接受的,60fps则可以明显提升交互感和逼真感,但超过75fps就不容易察觉有明显的流畅度提升了。如果帧率超过屏幕刷新率,则会浪费图像的处理能力。
2、刷新率
刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常是指垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。达到80Hz以上的刷新率就可以完全消除图像闪烁和抖动感。
3、编码格式
编码的目的是压缩数据量,采用编码算法压缩冗余数据。(MPEG、H.26X)
4、 封装格式
把编码后的音视频数据以一定格式封装到一个容器中,封装格式有mkv、avi、ts等。
5、码率
码率也就是比特率,比特率是单位时间播放连续的媒体(如压缩后的音频或视频)的比特数量。比特率越高,带宽消耗得越多。比特(bit)0或1
文件大小(b) = 码率(b/s) * 时长(s)
6、画质与码率
视频质量和码率、编码算法都有关系。
7、DTS 与 PTS
DTS
: 即 Decode Time Stamp,是标识读入内存中bit流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
PTS
: 即Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来
8、视频帧和音频帧
常见的视频帧有I、P、B帧等
I 帧
表示关键帧,可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成(因为包含完整画面)
P 帧
表示的是这一帧和之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
B 帧
是双向差别帧,也就是B帧记录的是本帧和前后帧的差别,通过前后画面数据与本帧数据的叠加取得最终的画面。B帧压缩率高,但解码时CPU比较吃力。
音频帧的概念没有那么清晰,跟音频编码格式相关,它是各个编码标准自己实现的。
PCM
(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放,比如采样率为44.1kHz,采样进度为16位的音频,你可以算出比特率是4410016kb/s,每秒的音频数据是固定的4410016/8字节。
AMR
帧比较简单,它规定每20ms的音频为一帧,每一帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数。
MP3
帧较复杂,包含更多信息,比如采样率、比特率等各种参数。音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧又分为帧头和数据实体两部分,帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。
9、采样率
每秒音频采样点个数(8000/44100Hz),采样单位用Hz表示。
三、视频封装格式
格式 | 全名 | 开发商 | 初版年限 | 特点 |
---|---|---|---|---|
MP4 | MP4 | Moving Picture Experts Group,即 MPEG(动态图像专家组) | 1998 | 常用有损压缩格式,通用性强 |
AVI | Audio Video Interleaved(音频视频交错格式) | 微软 | 1992 | 体积大算法简单 |
MOV | QuickTime 影片格式 | Apple | 1991 | 苹果专属格式对很多其他的播放器支持不是很友好 |
WMV | Windows Media Video | 微软 | 2003 | 微软的专业视频格式,兼容性并不是很好 |
FLV | Adobe Flash 网络流媒体格式 | Adobe | 2002 | 被淘汰的早期网络视频格式 |
MKV | Matroska 多媒体容器 | Matroska.org | 2002 | 最有包容性的视频格式,能容纳无限量、多种不同类型编码的视频、音频及字幕流 |
WebM | WebM | 2010 | 谷歌推出的 HTML5 标准的网络视频标准,以MKV容器格式为基础开发 | |
RMVB | RMVB | Real Networks | 1997 | 根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质不错的优点。已过时。 |
四、视频编码格式
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 |
H.264 | MPEG/ITU-T | 2003 | 各个领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
1. MPEG
:(Moving Picture Experts Group, ISO旗下的组织)
MPEG是Moving Picture Experts Group的简称。这个名字本来的含义是指一个研究视频和音频编码标准的“动态图像专家组”组织,成立于1988年,致力开发视频、音频的压缩编码技术。
版本 | 用途 |
---|---|
MPEG - 1 | VCD |
MPEG - 2 | DVD、数字有线电视信号 |
MPEG - 4(第二部分) | 视频电话、网络传输、广播和媒体存储 |
2. H.26X
: ITU-T VCEG(Visual Coding Experts Group,国际电联旗下的标准化组织)制定
版本 | 用于 |
---|---|
H.261 | 老的视频会议和视频电话产品 |
H.262 | DVD、数字有线电视信号(与MPEG共同制定,与MPEG-2完全一致) |
H.263 | 视频会议、视频电话和网络视频 |
H.264 | 高精度视频的录制、压缩和发布格式(与MPEG-4第十部分完全一致),当前主流 |
H.265 | H.264的两倍之压缩率,可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率) |
3. H.264
当前主流的编码格式是H.264,这是由ITU-T VCEG和MPEG共同制定的标准,MPEG - 4第十部分内容也是H.264。
视频封装格式 & 视频编码格式
封装格式是提供了一个容器,用于存放视频、音频以及其他配置信息,而编码格式是指对视频画面内容进行压缩的一种标准
六、音频格式
-
WAV
:因其文件扩展名为wav,微软和IBM联合开发的标准,数据本身的格式为PCM或压缩型,属于无损格式。 -
MP3
: MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。压缩比4:1~10:1之间。 -
AAC
:Advanced Audio Coding, 出现于1997年,由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。AAC压缩比通常为18:1。相比MP3,采用更高效的编码算法,音质更佳,文件更小。 -
Opus
:Opus格式是一个开放格式,使用上没有任何专利或限制,比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。2012年7月2日,Opus被IETF批准用于标准化。
七、H.264编码介绍
IPB帧
I帧
:帧内编码帧(intra picture),采用帧内压缩去掉空间冗余信息。
P帧
:前向预测编码帧(predictive-frame),通过将图像序列中前面已经编码帧的时间冗余信息来压缩传输数据量的编码图像。参考前面的I帧或者P帧。
B帧
:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的冗余信息,来压缩传输数据量的编码图像,也称为双向编码帧。参考前面一个的I帧或者P帧及其后面的一个P帧。
PTS和DTS
DTS
(Decoding Time Stamp)是标识读入内存中bit流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
PTS
(Presentation Time Stamp)用于度量解码后的视频帧什么时候被显示出来。在没有B帧的情况下,DTS和PTS的输出顺序是一样的,一旦存在B帧,PTS和DTS则会不同。也就是显示顺序的时间戳。
GOP
即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。
一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
简而言之:
字节大小:I > P > B
解码顺序:I -> P -> B
八、视频像素数据格式 RGB、YUV
YUV
YUV颜色的表示方法 “Y”表示亮度,“ U”表示色度,“V”表示饱和度。视频中常用的YUV格式有YUV420,YUV444,YUV422。这些个格式代表的是YUV分量的比例,下面还可以细分很多格式。像YUV420又可以分为两种:YUV420P和YUV420SP,android的相机默认图像格式NV21属于YUV420SP格式。
YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV占1.5个字节。
YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占 2个字节。
YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占3个字节。
1.YUV420P:(YU12(Android平台下叫I420格式)和YV12)一帧YUV420P(YU12)像素数据,包含wh3/2 Byte的数据,前wh Byte存储Y分量,接着wh 1/4存储U,最后wh1/4存储的是V。一帧YUV420P的图像Y:U:V = 4 :1:1
2.YUV444P:一帧YUV444P像素数据包含wh3 Byte的数据。前wh Byte存储Y,接着的wh Byte存储U,最后wh Byte存储V。一帧YUV420P的图像Y:U:V = 1:1:1
YUV420 数据存储方式
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
U U U U U U V V V V V V U V U V U V V U V U V U
V V V V V V U U U U U U U V U V U V V U V U V U
(I420) (YV12) (N12) (NV21)
RGB
RGB相信大家都比较熟悉,他是颜色的三原色,“R”代表红色,“G”代表绿色,“B”代表蓝色,不同的分量颜色值搭配可以表示不同的颜色。
RGB24像素数据,RGB的分量是怎样存储的呢。上述我们YUV420P的存储分量是分开存储的(平面方式),而RGB每个像素的三个分量是连续存储的(打包方式)。一帧RGB24数据格式的图像,包含wh3Byte的数据,存储的顺序是第一个像素(8bit)R,(8bit)G,(8bit)B接着存储下一个像素点(8bit)R,(8bit)G,(8bit)B这样一次存储下去的。
小结:数据的存在格式可以分为packed(打包)和planar(平面)两种,上述的YUV420P,YUV444P就是属于平面的存储方式,RGB24属于打包的存储方式。YUV420(NV12、NV21)的数据存储既有平面又有打包,Y平面,UV打包,即Y信息存储在一个数组中,UV信息存储在一个矩阵中。了解了最基础的像素数据格式以及存储的分量的位置,便可以去处理操作图像。
九、音频采样数据PCM
PCM它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
来了解一下PCM重要的属性:
1.Sample Rate : 采样率(一秒钟采样点的个数)8kHz,44.1kHz(CD音质),48kHz
2.Sample Size : 位宽度 8-bit,16-bit 一个点所占的bit位,位宽度越高声音保真度越高
3.Channels : 通道个数,包含立体声和单声道两种类型,立体声包含左声道和右声道
PCM数据存入的循序。如果是单声道的音频文件,采样数据按时间的先后顺序依次存入,如果是双声道的话就按照LRLRLR的方式存储。