以前讲了一些音视频的录制操做,还有声音采集的概念。采集只是多媒体操做流程中的一个环节,更多的环节能够看看这个图:
ios
声音或视频采集后,就是编码、写文件或推流。不论是编码仍是写“文件”,你都能找到相应的程序(好比FFmpeg)来完成,通常加上本身的业务代码就能实现本身的功能需求。那就没有东西好说的了?算法
没东西说怎么行,怎么骗到粉丝?因而,我决定说一些概念上的东西,虽然它很枯燥,但对于你理解大局或吹牛都很实用,但愿你继续看完这篇文章,再留言对小程讽刺一翻。windows
本文介绍音视频常见的编码格式与容器格式。浏览器
声音或图像在采集后须要进行编码压缩,这个格式叫做编码格式,或压缩格式。压缩后的数据通常须要保存到文件,或者以文件的组织(好比一些tag或box)形式来传输,这就好像把编码后的数据放到一个容器中同样,因此这个叫容器格式或封装格式。缓存
编码的目的是为了节省体积或带宽。网络
通常一首歌曲4分钟,若是不对它进行压缩,以pcm格式采集后就保存起来,那这个文件占多大致积呢?app
以44100的采样率、双声道跟16位采样精度(2字节)来计算:44100*2*2*(4*60) = 40.37MB。less
也就是说,若是没有编码压缩,一个通常的音频文件就占了40m,那“磁盘容量不足”极有可能成为突出问题;若是在网络上传输,那带宽成本就会成为问题。ide
那若是通过编码,能够节省多少体积呢?以常见的mp3编码格式来看,按mp3的十分之一的压缩率,能够把40m的大小变成4m大小,节省的体积十分明显,空间不足的警报解除了。而压缩率能够大概计算出来(以128kbps来算):44100*2*2/(128000/8*1) = 11。此外,从压缩的角度,压缩算法决定码率与质量;从传输角度来看,码率表示我1秒钟要表达这么多bit,若是你网络在1秒钟内不能传输这么多bit(好比要下1秒才能传递完),那播放就必定会卡顿(没有缓存处理的状况下),而能不能传输这么多bit,跟带宽直接相关。性能
因此,减肥是有必要的。那么,有哪些减肥(编码)格式呢?
pcm(脉冲编码调制)是特殊的编码格式,由于它没有压缩数据,没有减肥效果,它是釆集声音时表示电平值的一种格式,也是其它编码格式的原始数据。若是再深刻一点,你会发现这一堆pcm值反映了能量的大小与变化的规律,这是另外一个话题。
mp3是mpeg制定的压缩标准。
mpeg,动态图像专家组,从属于ISO标准化组织,主要工做是制定视音频压缩编码标准。还有一个jpeg,是静态图像专家组。你不要小看标准,得标准者得天下,为何要争5G标准?
mpeg标准的版本有:mpeg1/2/4/7/21,可是,没有mpeg3,而mpeg2.5是非官方版本,是mpeg2的扩展。
咱们常常说的mp3,在它以前,还有mp1与mp2。
mp1/mp2/mp3,通常都指mpeg-1 audio layer1/2/3,都是基于mepg1标准。layer1/2/3的区别是编码的复杂度不同,由低到高,layer3的复杂度最高,使得它编解码时会更耗时耗力,但它编码时能够用更小的体积来达到相同的质量。
注意,mp3并非指mpeg3标准,实际上不存在mpeg3标准,而mp3是基于mpeg1标准,通常来讲mp1与mp2也是基于mpeg1标准。mp3全称是:mpeg-1 audio layer3。
mp3的压缩,大概来讲,就是把时域波形转换成频率数据,再把高频段与低频段加大压缩力度(特别是高频段),对不一样频段使用不一样的压缩比例,为有损压缩,压缩率达1:10或更高。
Advanced Audio Coding,目标是取代mp3,并且彷佛真的作到了,如今aac编码格式获得普遍使用(h264搭配aac处处可见),你惟一要担忧的是aac编码的受权费的问题。
aac在mpeg-2与mpeg-4标准中都有涉及。从编码的角度,lc-aac(低复杂度的aac)使用最为普遍,此外还有he-aac(高性能的aac)、main-aac、ssr-aac之类规格的编码格式。
ac3, 全称是Audio Coding version 3,是杜比(Dolby)实验室制定的有损音频编码格式。
ac3普遍应用于5.1声道(前左右、后左右、中低音),也是电影院专属编码格式。
ape与flac都是无损压缩,也就是能还原出原始的pcm数据。
ape,全称就是ape,猿的意思,因此也叫Monkey。
flac,Free Lossless Audio Codec(无损音频压缩编码)。
想听高品质的音频,ape与flac是很好的选择。
wma,Windows Media Audio,是微软力推的一种音频格式。wma是有损压缩,压缩率可达1:18,比mp3更高,但未必音质就更好。
amr,Adaptive Multi-Rate,由欧洲通讯标准化委员会提出,在移动通讯系统中普遍使用的语音标准。
amr(分wb或nb)编码时,支持的参数是有限制的,好比nb最高的采样为8000,比特率最高为12200,声道数为1。
amr最大的特别就是体积小,音质差。在语音通话中(直播或本地存储)常用到。
以上,小程介绍了编码格式,接下来介绍容器格式。
容器格式也叫封装格式,由于把编码数据给封装起来了。一个封装格式每每能够支持多个编码格式。
mk,是matroska的缩写。matroska封装格式,是CoreCodec公司制定的格式,俗称“万能的容器”,基本上支持全部编码格式。
mkv,是视频容器,通常也包括音频与字幕,是matroska格式中应用最普遍的一种。
mka,只包括音频的matroska格式,能够包括多个音轨,好比国粤英三个音轨。
mks,只包括字幕流的matroska格式。
mp4,是动态图像专家组(mpeg,从属于ISO)制定的封装格式。
mp4对编码格式有要求,只支持基于mpeg4的编码格式,好比视频的h264,音频的aac。对于其它编码格式,并不是官方支持,好比ac三、mp3等。若是硬把非官方支持的编码格式塞到mp4容器,难以保证必定能被播放。
mp4对编码格式要求明确,是它能普遍应用的一个缘由,特别在移动平台,好比ios系统上。
mp4若是只有音频,则文件有可能以m4a做为后缀,这是苹果公司起的名字,用来区分带有视频的通常的mp4。因此m4a文件也是mp4文件,从容器的角度。通常m4a里面的音频是aac压缩格式,但不排除塞了mp三、applelossless等格式的数据。
ts,transport stream的缩写,即传输流,从名字就知道它能够用于网络播放。
ts,全称是mpeg2-ts,早期普遍应用于数字电视,视频编码格式为mpeg2。
苹果公司制定的hls协议,使用ts做为数据的封装格式,同时也简化了ts的设计,让这种格式普遍应用于在线直播。简化后的ts,视频编码格式为h264,音频为aac或mp3。
每一个ts包,能单独解码与播放。
flv,FlashVideo的缩写,是Macromedia公司(2005年被Adobe收购)制定的视频封装格式。
flv被普遍应用于网络视频播放。flash插件播放器的出现,使得在浏览器上能够轻松观看在线视频,免去安装本地播放器的麻烦。而flash播放器使用flv容器。
直播的兴起,也影响了flv的使用,好比rtmp流协议,使用的是flv封装格式。
avi,Audio Video Interleaved,即音视频交错格式,微软在1992年发布的封装格式,基于riff文件格式。
历史久远,但简单的开发接口与windows平台的影响,还有很多忠实粉丝。
好了,差很少了。
为何有如此多的封装格式或编码格式呢?一来不一样的应用场景的确须要不一样的格式,二来一样的场景,大公司都会制定本身的标准并成为专利(抢先成为行业标准),不会屈服于别家的规则,这是标准啊!
总结一下,没什么好说的,通篇都是编码格式与封装格式的概念知识。