Bootstrap

音视频基础知识

音视频术语是了解音视频开发的基础内容,如一些专有名词,常见的口语化名词等,它们表述了音视频中客观存在的属性或特征。

1.1 视频编码

所谓视频编码就是指通过特定的压缩技术,将某个视频格式文件转换成另一种视频格式文件的方式。视频流传输中最重要的编解码标准有国际电联的H.26系列1/H.263/H.264及M-JPEG,MPEG系列标准。

1.2音频编码

压缩算法包括有损压缩和无损压缩。 无损压缩是指解压后的数据可以完全复原。在常用的压缩格式中,用得较多的是有损压缩,有损压缩是指解压后的数据不能完全复原,会丢失 一部分信息,压缩比越小,丢失的信息就越多,信号还原后的失真就会越大。根据不同的应用场景(包括存储设备、传输网络环境、播放设备 等),可以选用不同的压缩编码算法,如PCM、WAV、AAC、MP3、AC3、 Ogg等。

压缩编码的原理实际上是压缩掉冗余信号,冗余信号是指不能被人 耳感知到的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号等。

MP3:一种音频压缩技术。它被设计用来大幅度降低音频数据量,抛弃人耳基本听不到的高频声音,只保留能听到的低频部分,从而将声音用1:10的压缩率压缩。

AAC:一种专为声音数据设计的文件压缩格式,与MP3不同,它采用了全新的算法进行编码,更加高效,更高性价比。利用AAC格式,在感觉声音质量没有明显降低的前提下,可使文件更小巧。AAC属于有损压缩格式,与时下流行的APE,FLAC等无损压缩格式相比音质存在本质上的差距。

AC3:Dolby实验室所发展的有损音频编码格式。AC3被广泛应用于5.1声道,其提供的环绕声系统由5个全频域声道和1个超低音声道组成,使一些场景(如爆炸,撞击等)的声音效果更好。

WAV:是微软公司开发的一种声音文件格式,“*.WAV”格式支持MSADPCM、CCITT A LAW 等多种压缩算法,支持多种音频位数、采样频率和声道,标准格式的 WAV 文件和 CD格式一样,也是 44.1K 的采样频率,速率 88K/秒,16 位量化位数,WAV 格式的声音文件质量和 CD 相差无几(音质出众),也是目前 PC 机上广为流行的声音文件格式。

Ogg:Ogg有着非常出色的算法, 可以用更小的码率达到更好的音质,而且是完全免费的。可以用比MP3更小的码率实现比MP3更好的音质,高中低码率下均有良好的表现,但兼容性不够好,流媒体特性不支持。

WMA:由微软公司开发的一种数字音频压缩格式。音质要强于 MP3 格式,WMA 的压缩率一般都可以达到 1:18 左右。这是一种难以复制拷贝的音乐压缩技术,受到了音乐公司的欢迎。外 WMA 还支持音频流(Stream)技术,适合在网络上在线播放。WMA 作为微软力推的一种音频格式,几乎所有的音频格式都感受到了 WMA 格式的压力。

FLAC:自由无损音频压缩编码,其特点是可以对音频文件无损压缩并且是免费的。不同于其他有损压缩编码,压缩后不会有任何音质损失,现在已被很多软件及硬件音频产品所支持。

Opus:是一个有损声音编码的格式,取代Speex和Vorbis,且适用于网络上低延迟的即时声音传输。Opus格式是一个开放格式,使用上没有任何专利或限制。Opus具有非常低的算法延迟,非常适合用于低延迟语音通话的编码,像是网络上的即时声音流、即时同步声音旁白等等。

PCM介绍

对声音进行采样、量化过程被称为脉冲编码调制(Pulse Code Modulation),简称PCM。PCM数据是最原始的音频数据完全无损,所以PCM数据虽然音质优秀但体积庞大,为了解决这个问题先后诞生了一系列的音频格式,这些音频格式运用不同的方法对音频数据进行压缩,其中有无损压缩(ALAC、APE、FLAC)和有损压缩(MP3、AAC、OGG、WMA)两种。如WAV就是在PCM数据格式的前面加上44字节,分别用来描述PCM的采样率、声道数、数据格式等信息。

音频编码格式的比较:维基百科

PCM与WAV

pcm是一种数据编码格式,CD唱盘上刻录的就直接用pcm格式编码的数据文件;

wav是一种声音文件格式,wav里面包含的声音数据可以是采用pcm格式编码的声音数据,也可以是采用其它格式编码的声音数据。

pcm是一个通信上的概念,脉冲编码调制。

wav是媒体概念,体现的是封装。

wav文件可以封装pcm编码信息,也可以封装其他编码格式,例如mp3等。

WAV: 一种音频容器(注意:只是音频),大家常说的 WAV 就是没有压缩的 PCM 编码,其实 WAV 里面还可以包括 MP3 等其他 ACM 压缩编码。

 

1.3 常见的多媒体框架及解决方案

VLC:即Video LAN Client,是一款自由,开源的跨平台多媒体播放器及框架。

FFmpeg:多媒体解决方案,不是多媒体框架,广泛应用于音视频开发中。

GStreamer:一套构建流媒体应用的开源多媒体框架。

1.4 相关知识点

帧率:(FPS, 帧/秒), 就是视频画面刷新的速度,图形处理器每秒能够更新的次数, 作为参考, 国内电视机一般是 25FPS, 电影标准为 24FPS. 手机芯片,以支持 30FPS为主。

分辨率:物理分辨率, 即手机屏幕能显示的像素数;视频文件的分辨率, 这个是指视频画面的实际分辨率, 及视频成像产品所形成的图像大小或尺寸,如320x240, 480x272, 640x480 等等。

码率:也就是比特率,单位时间播放连续的媒体(如压缩后音频视频)的比特数量。比特率越高,带宽消耗得越多。一般用多少 kbps(千比特/秒)或者 mbps(兆比特/秒)来表示。 

文件大小 = 码率(b/s) x 时长(s)

采样频率:即取样频率,指每秒钟取得声音样本的次数(8000/44100Hz)。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。

声道数

即声音的通道的数目。常见得声道有单声道,立体声道,4声道,5.1声道,7.1声道。

  • 单声道:设置一个扬声器;
  • 立体声道:把单声道一个扬声器扩展为左右对称的2个扬声器;
  • 4声道:规定了4个发音点,前左,前右,后左,后右;
  • 5.1声道:来源于4.1声道,将环绕声道一分为二,分为左环绕和右环绕,中央位置增加重低音效果;
  • 7.1声道:在5.1声道的基础上又增加了中左和中右两个发音点。

5.1声道是一种的六声道环绕声系统,广泛用于电影院及家庭影院。它包含2个前置喇叭、2个后置喇叭、1个中央声道及1个重低音喇叭。

“5”是指五个3-20,000Hz的全局喇叭,“.1”是指3-120Hz的重低音喇叭。

Dolby Digital,SDDS,DTS及Pro Logic II都是常见的5.1声道音效系统。

编码格式

编码的目的是压缩数据量,采用的编码算法压缩冗余数据。

通过 ffprobe -show_frames 命令可以查看视频文件中的帧信息,如:

ffprobe -show_streams new.wav  

[STREAM]
index=0
codec_name=dts (编码名)
codec_long_name=DCA (DTS Coherent Acoustics) (编码全名)
profile=DTS-ES (编码的profile)
codec_type=audio (编码类型)
codec_tag_string=[1][0][0][0]
codec_tag=0x0001
sample_fmt=fltp
sample_rate=44100
channels=7
channel_layout=6.1

里面输出的 codec_name=dts 就是该音频的编码格式。

封装格式

将编码后的音视频数据以一定格式封装到一个容器。

通过 ffprobe -show_format 命令可以查看多媒体的封装格式,如

ffprobe -show_format new.wav 

[FORMAT]
filename=new.wav
nb_streams=1 (多媒体中包含的流的个数)
nb_programs=0 (节目数)
format_name=wav (使用的封装模块的名称)
format_long_name=WAV / WAVE (Waveform Audio) (封装的完整的名称)
start_time=N/A
duration=274.181224
size=48365612
bit_rate=1411201
probe_score=99

这里面输出的 format_name=wav 就是该音频文件的封装格式。

(ffprobe命令行使用,后续的ffmpeg文章会有详细介绍)

封装格式和编码格式的区别:

要区分开封装格式和编码格式的区别,封装格式就是媒体文件的格式:文件是既包括视频又包括音频、甚至还带有脚本的一个集合,封装格式也可以叫容器;

文件当中的视频和音频的压缩算法才是具体的编码格式。

1.5 协议

两大标准制定组织
这里的标准,主要指的是音视频压缩标准。两大组织分别是国际标准化组织(iso)和国际电信联盟(itu)。
在音视频压缩标准方面,mpeg 系列的协议是 iso 制定的标准,而 h 系列的协议则是 itu 制定的标准。

视频协议

目前主要的视频压缩协议有:h.261、h.263、h.264 和 mpeg-1、mpeg-2 和 mpeg-4。第一个视频压缩标准是 h.261,它的算法 现 在来看,非常简单,但是,它的很多视频压缩的思想,一直影响到现在最新的压缩标准 h.264。

h.264 是两大组织最新的算法成果,它在算法层面应该说是非常先进了,有人评价,h.264 是视频压缩技术的一个里程碑,在可预见的 5 到 10 年内,出现新的视频压缩协议可能性很小,除非压缩理论有重大突破

音频协议

音频协议也分两大类,itu 组织的主要是用于视频会议的 g 系列协议,包括 g.711、g.722、g.723、g.726、g.728、g.729 等。这些 协议主要有两大特点,第一是比较关注语音压缩,毕竟开会主要是要听人讲话;对音乐的压缩效果可能就不是太好了;第二是压缩率都比较大,码率都比较低,典型 的 g.723 支持 5.9k/s 这样的码率,而且语音音质还很不错。iso 的音频可能更为人熟知一些,最流行的就是 mp3,它的全称是 mpeg-1 audio layer 3,意思是 mpeg-1的音频第三层;另外,最新的音频算法被称为 aac,它定义在 mpeg-2 或 mpeg-4 的音频部分。他们的特点是 音质好,支持多声道,高采样精度和采样频率,尤其对音乐的压缩效果比 g 系列要好太多。当然,这也是因为它们的应用领域侧重点不同造成的。

1.6 软硬解

硬件解码:视频解码分为软解和硬解。
所谓“软解”就是通过软件让 CPU 进行视频解码处理而“硬解”是指不依赖于 CPU,通过专用的设备(子卡)单独完成视频解码,比如曾经的 VCD/DVD 解压卡、视频压缩卡都被冠以“硬解”的称号。现在实现高清硬解不需要额外的子卡,也不需要额外的投入,因为硬解码模块被整合在了GPU 内部,而目前主流的显卡(包括整合显卡)都能支持硬解码。

“硬解”其实更需要软件的支持,只是基本不需要 CPU 参与运算,从而为系统节约了很多资源开销。通过降低 CPU占用率,可以给用户带来很多实惠。

GPU 硬解码高清视频的优势:

1. 不需要太好的 CPU,单核足矣,CPU 方面节约不少资金;
2. 硬解码基本相当于免费附送,不到 500 元的整合主板都能完美支持;
3. 硬解码让 CPU 占用率超低,系统有能力在看 HDTV 的同时进行多任务操作;
4. CPU 需要倾尽全力才能解码 HDTV,而 GPU 只需动用 0.1 亿晶体管的解码模块就能完成任务,功耗控制更好;

GPU 硬解码高清视频的劣势:

1. 起步较晚,软件支持度无法与软解相提并论;
2. 面对杂乱无章的视频编码、封装格式,硬解码无法做到全面兼容
3. 软解拥有大量画面输出补偿及画质增强技术,而硬解这方面做得还远远不够
4. 硬解码软件设置较为复杂,很多朋友根本不知道该如何正确使用 GPU 硬件解码
虽然硬解码拥有种种缺点,但依然倍受广大用户追捧,因为低成本和节能环保这两大致命诱惑让人难以抗拒。随着时间的推移,现在硬解码的缺点基本被改进。

Android中的软硬解

● 硬解,MediaCodec,android中的VideoView,MediaPlayer,Google的ExoPlayer;
● 软解,使用音视频解码库,比如FFmpeg,基于ffmpeg的B站开源播放器ijkplayer 。

在Android中使用硬件解码直接使用MediaCodec就可以了,虽然MediaPlayer也是硬件解码,但是被封装得太死了,支持的协议很少。而MediaCodec就很好拓展,我们可以根据流媒体的协议和设备硬件本身来自定义硬件解码,代表播放器就是Google的ExoPlayer。

 

便于测试 放上2段在线音乐:

一段在线MP3地址:http://mpge.5nd.com/2015/2015-11-26/69708/1.mp3

http://mvod.lvlt.rtve.es/resources/TE_S180GRA/mp3/8/7/1453115855678.mp3

 

博主音视频系列下一篇文章《ffmpeg的介绍,编译与使用

 

参考资料:

音频编码格式的比较

音频PCM数据的采集和播放

《Android音视频开发》第一章

《音视频开发进阶》第一章

 

 

;