音视频基础技术总结。
误入CV 行业,突然觉得还挺有意思。像一些图像,音视频基础知识还是要补一补。于其说是总结,不如说是扫盲吧。
只要是搞音视频的,应该没有谁没听过FFmpeg,就连我这个小白都听过。
现在主流的第三方播放器都是基于FFmpeg开源库开发的。它几乎实现了所有的封装格式、传输协议以及音视频编解码功能,功能非常强大。不过FFmpeg比较复杂,研究透需要花费大量的时间,限于时间,从音视频基本概念入手,了解码率、帧率、视频格式、编码原理等。
音视频基础概念
-
码率
码率是传输室单位时间传送的数据位数,单位是千位每秒(kbps),分为静态码率(CBR)和动态码率(VBR),静态码率的视频文件从头到尾都是恒定码率,优点运算量小,压缩快,支持设备范围广,缺点支持范围大,画质较差。动态码率没有固定的比特率,优点画面质量高,体积小,缺点算法复杂,运算量大,压缩时间长。 -
帧率
指每秒显示的图片数或者GPU处理时更新的次数,单位是帧每秒(FPS)。 -
位深度
表示像素的位数,位深度越大,位数越多,可用的颜色越多,画面也越逼真。常见的有8bit, 10 bit, 12bit。 -
视频格式
1)封装格式
也就是常见的视频文件格式,把视频、音频、字幕等零散信息组装在一起。ts适合网络流媒体播放,一般用于直播,mp4只包含一条视频轨和音频轨,适合大多数的播放设备,mkv包含多条音频轨、视频轨、字幕等,适合网络分享。
2)编码格式
通过特定的压缩算法,将某种视频格式的文件转化为另一种视频格式的文件,常用的编码标准有H.26X系列、MPEG系列、Divx、xvid、WMD-HD和VC-1等。
移动端使用最多的MP4视频文件,主要使用H.264AVC编码格式。优点主要如下:
A. 低码率:具有很高的数据压缩率,有效减少用户带宽的占用。
B. 容错能力强,提供了在不稳定网络情况下发生丢包的解决工具。
C. 网络适应性强,能在不通的网络上传输。
D. 提供连续、流畅的高质量图像。
-
H.264编码
原理在一段变化不大的图像画面,先编码出完整的图像帧A,后面的图像帧B不编码全部图像,只编出与A帧的差别,这样B帧就小很多,若果变化依旧不大,随后的C帧也按照B帧的编码方式,就这样循环下去。H.264协议定义了三种帧,完整编码的帧(I帧),参考I帧,只包含差异的帧(P帧),参考前后帧编码的帧(B帧)。核心算法是帧内压缩(生产I帧的算法),帧间压缩(生成P帧和B帧的算法)。 -
流媒体协议
服务器与客户端之间通信遵循的规定。
互联网视频服务通常RTMP,MMS,HTTP这类的协议,作为其流媒体的传输层协议,因为不会发生丢包。 -
音频编码
音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。 -
网络视音频平台对比
网络视音频服务主要包括点播和直播。点播是根据用户需求播放相应的节目,大部分网站都能提供这种方式。直播在网络电视台,社交视频网站常见。
A. 直播平台参数对比
直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。
B. 点播平台参数对比
点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP优势,传输过程不会丢包,保证视频质量,大部分Web服务器支持,节约开支。
-
RTSP协议
RTSP(Real-TimeStream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。 -
Android支持的格式
支持mp4、3gp、mkv和webm四种视频封装格式。webm格式是在mkv格式的基础上开发的新格式,包含了VP8/VP9视频轨。 -
Android实现视频编码
主要使用硬编码和软编码两种,硬编码直接调用GPU进行编码处理,实现方式通过Android自身提供的MediaCodec类处理音视频,软编码是使用CPU进行运算,实现方式通过集成FFmpeg多媒体库处理音视频。硬编码优点是功耗低、编解码速度快,缺点是扩展性不强、兼容性差、适用于智能家居产品、手机摄像实时取景。FFmpeg优点是封装了很多格式,灵活,兼容性好、功能强大,缺点功耗大,占用CPU较多,效率低,适用于短时间拍摄。