初始音视频编解码器
0x000 常见的视频格式
对大部分人而言最熟悉的视频格式为MP4。但生活中,视频格式远不止MP4,早些年,青春无敌,熬夜在网吧下载教育片,嗯,就是你想的那个教育片,视频格式大部分是RMVB和AVI。目前,我们也能看到其他格式的视频:FLV、MKV、TS等。
严格来说,这些视频格式是封装格式。什么是封装格式?就是把视频和音频合并打包在一起的规范。如果仅仅通过封装格式判断音视频编码技术,是很难看出的。
在Mac端,在视频文件上点击右键“显示简介”,则能清晰看到编解码器,该视频采用了ACC和H.264对音频和视频进行压缩编码。其中,AAC是音频编码标准,H.264是视频编码标准。
在Windows系统中,下载 MediaInfo 可以查看音视频媒体信息。MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用、免费获得源代码)。他除了提供DLL之外,本身也提供GUI工具用于查看视频信息。Mediainfo-GUI的安装文件可以从Sourceforge上面下载,地址:http://sourceforge.net/projects/mediainfo/。源码可在这里下载:https://mediaarea.net/zh-CN/MediaInfo/Download/Source。
0x001 视频播放器原理
说起视频,必然要带上音频。以后如果不是特殊说明,提起视频则指音视频。音视频封装、视频压缩编码、音频压缩编码等则是视频处理中不可或缺的一些技术。如果我们还要使用网络传输,则需要考虑流媒体协议。
视频播放区分本地和互联网,本地播放就不需要考虑传输。因此,播放互联网上的视频可以分为以下几个步骤:解协议、解封装、解码音视频、音视频同步。本地播放在不需要解协议这一步。
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如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数据。
视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
0x010 流媒体协议
何为流媒体?流媒体(streaming media)是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。
通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。由于媒体是以连续的数据流发送的,因此在媒体到达时即可播放。可以像下载的文件一样进行暂停、快进或后退操作。
流媒体协议是流媒体服务端和客户端之间通信遵循的规定。比较常见的流媒体协议如下:
名称 | 传输层协议 | 客户端 | 用途和领域 |
---|---|---|---|
RTSP+RTP | TCP+UDP | VLC, WMP | IPTV |
RTMP | TCP | FLASH | 由于Flash淘汰,RTMP目前主要用于提取Stream。 设置解码器将视频发送到CDN时使用RTMP协议, 然后通过HLS传递给客户端播放器。 |
RTMFP | UDP | FLASH | 支持P2P |
MPEG-DASH | TCP | 任意 | 广播。支持码率自适应,几乎支持所有编解码, 也支持加密媒体扩展和媒体扩展源。 |
MSS | TCP/UDP | WMP | Xbox或Win平台。支持码率自适应。 |
HDS | TCP | FLASH | RTMP的后继,增加了码率自适应。 |
HLS | TCP | 任意 | 支持自适应码率、H.265解码器 |
-
RTSP(Real Time Streaming Protocol) + RTP(Real-time Transport Protocol)
-
RTMP(Real-Time Messaging Protocol)
-
RTMFP(Real Time Media Flow Protocol)
-
MPEG-DASH(Dynamic Adaptive Streaming over HTTP)
-
MSS(Mircrosoft Smooth Stream)
-
HDS(HTTP Dynamic Streaming)
-
HLS(HTTP Live Streaming)
0x011 视频封装格式
视频封装格式相当于一种存储视频信息的容器。封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:
主要封装格式一览
名称 | 推出机构 | 流媒体 | 支持的视频编码 | 支持的音频编码 | 目前使用领域 |
---|---|---|---|---|---|
AVI | Microsoft Inc. | 不支持 | 几乎所有格式 | 几乎所有格式 | BT下载影视 |
MP4 | MPEG | 支持 | MPEG-2,MPEG-4,H.263,H.264等 | ACC,MPEG-1 Layers I, II, III,AC-3等 | 互联网视频网站 |
TS | MPEG | 支持 | MPEG-1,MOEG-2,MPEG-4,H.264 | MPEG-1 Layers I, II, III, ACC | IPTV,数字电视 |
FLV | Adobe Inc. | 支持 | Sorenson,VP6,H.264 | MP3, ADPCM, Linear PCM, AAC等 | 互联网视频网站 |
MKV | CoreCodec Inc. | 支持 | 几乎所有格式 | 几乎所有格式 | 互联网视频网站 |
RMVB | Real Networks Inc. | 支持 | RealVideo8,9,10 | AAC, Cook Codec, RealAudio Lossless | BT下载影视 |
MOV | Apple Inc. | 支持 | 几乎支持格式 | 几乎支持格式 | 互联网视频网站 |
推荐一个封装格式分析工具:Elecard Format Analyzer、mp4Info、Mp4Explore、FFMPEG、Mp4Box、Elcard StreamEye、Video Eye、MediaInfo(MediaInfo for MAC)等。
0x100 视频编码
视频编码的主要作用是将视频像素数据(RGB、YUV等)压缩成为视频码流,从而降低视频的数据量。视频数据非常大,不经过压缩传输对于服务方和用户都将是灾难。如果直接使用24色RGB而不压缩,一部90分钟1080p(1920x1080)高清电影按照标准24fps计算,大概需要1920*1080*24*24*60*90=6449725440000bit=6449725440000/8/1024/1024/1024/=750.84686279296875GB
,也就是不经压缩大概需要750GB。毫不夸张的说,一部电影750GB确实是一场灾难,好在,这场灾难已经消灭在摇篮里面––这个武器便是视频编码技术。
名称 | 推出机构 | 推出时间 | 使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 影视、互联网行业 |
H.264 | MPEG/ITU-T | 2003 | 各领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | Google平台 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft | 1006 | 微软平台 |
0x101 音频编码
音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质
名称 | 推出机构 | 推出时间 | 使用领域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域 |
AC-3 | Dolby | 1992 | 电影 |
MP3 | MPEG | 1993 | 各个领域 |
WMA | Microsoft | 1999 | 微软平台 |