音频和视频基础 (I)
前言
随着通信技术的不断发展,互联网信息的传播与娱乐方式经历了从文字到图片再到音视频的转变,音视频通信,直播互动,短视频等应用百花齐放,特别是5G时代的到来,互联网对音视频开发者的需求会越来也大,有兴趣的同学可以把握机遇,提升自己,加入到这个行业当中。
在学习音视频开发之前,我们先来了解一下音视频的基本知识。
音频
1. 音频开发的具体是指做什么?
(1)音频采集/播放
(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音/分离,等等)
(3)音频的编解码和格式转换
(4)音频传输协议的开发
2. 音频应用的难点在哪?
减少延时、减少卡顿、降噪、回声消除、静音检测、混音,等等。
3. 音频开发基础概念有哪些?
在音频开发中,下面的这几个概念经常会遇到。
(1) 采样率(samplerate)
每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。
根据奈奎斯特定理,按比声音最高频率高2倍以上的频率对声音进行采样,经过数字化处理之后,人耳听到的声音质量不会被降低。所以采样频率一般为44.1kHz。
8khz:电话等使用,对于记录人声已经足够使用。
22.05khz:广播使用频率。
44.1khz:音频CD。
48khz:DVD、数字电视中使用。
96khz-192khz:DVD-Audio、蓝光高清等使用。
(2) 量化精度(位宽)
每个采样点,都需要用一个数值来表示大小,指的是一个采样使用多少bit存放,常见的位宽是8bit 或者 16bit,位数越多,表示得就越精细,声音质量自然就越好,当然,数据量也会成倍增大。
(3) 声道数(channels)
由于音频的采集和播放是可以叠加的,因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。
单声道(Mono)和双声道(Stereo)比较常见,顾名思义,前者的声道数为1,后者为2
(4) 音频帧(frame)
这个概念在应用开发中非常重要。
音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。
这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:
假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为:
int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte
(5) 音频码率:
音频码率=采样率*位深*声道数目,例如
44100 * 16 * 2 = 1378.123kbps
一分钟音频数据的大小:1378.125 * 60 / 8 / 1024 = 10.09MB
到这里,很多同学肯定会有疑问,我们平时听的音乐四五分钟也才四五兆,这里怎么一分钟钟就十多兆了呢?
所以这就是音频编码的诞生的原因,其实编码就是一个压缩的过程。压缩又分为有损压缩和无损压缩:
有损压缩就是去掉冗余信号,冗余信号是指不能被人耳感知到的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号等
无损压缩就是通过优化排列方式来达到压缩目的。
4. 常见的音频编码方式有哪些?
WAV(无损)
WAV编码就是在PCM数据格式的前面加上44字节,分别用来描述PCM的采样率、声道数、数据格式等信息。
特点:音质非常好,大量软件都支持。
缺点:因为没用经过压缩,所以文件占用的储存空间会特别大。
适用场合:多媒体开发的中间文件、保存音乐和音效素材。
MP3(有损)
MP3具有不错的压缩比,使用LAME编码(MP3编码格式的一种实现)的中高码率的MP3文件,听感上非常接近源WAV文件。现如今市面上的音乐大多是这种编码格式。
特点:音质在128Kbit/s以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。
缺点:由于技术比较落后,同样码率下音质会比AAC、OGG差一些。
AAC(有损)
AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS、SBR等),衍生出了LC-AAC、HE-AAC、HE-AAC v2三种主要的编码格式。
Ogg(有损)
Ogg是一种非常有潜力的编码,在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。Ogg除了音质好之外,还是完全免费的,这为Ogg获得更多的支持打好了基础。Ogg有着非常出色的算法,可以用更小的码率达到更好的音质,128Kbit/s的Ogg比192Kbit/s甚至更高码率的MP3还要出色。但目前因为还没有媒体服务软件的支持,因此基于Ogg的数字广播还无法实现。Ogg目前受支持的情况还不够好,无论是软件上的还是硬件上的支持,都无法和MP3相提并论。
特点:可以用比MP3更小的码率实现比MP3更好的音质,高中低码率下均有良好的表现。
缺点:兼容性不够好,流媒体特性不支持。
FLAC(无损)
FLAC是一套著名的*音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如MP3 及AAC,它不会破坏任何原有的音频资讯,所以可以还原音乐光盘音质。2012年以来它已被很多软件及硬件音频产品(如CD等)所支持.
视频
1. 视频开发的具体是指做什么?
(1)视频采集/播放
(2)视频算法处理(画质模糊,卡顿)
(3)视频的编解码和格式转换
(4)视频传输协议的开发
2. 视频频应用的难点在哪?
减少延时、减少卡顿、避免音视频不同步等。
3. 视频开发基础概念有哪些?
在视频开发中,下面的这几个概念经常会遇到。
1. 帧
帧是视频开发常见的一个基本概念,可以表示为一张画面,一个段视频本质上就是有许多画面组成,因此,一个视频就是由许许多多的视频帧组成。
在视频数据的压缩处理中,每帧都代表着一副画面,由于视频前后两帧的画面极为相似,因此可以通过前一帧的画面数据来进行压缩或者解压缩,根据参考的帧的不同,可以划分为 I 帧、P 帧 和 B 帧。
I 帧:(Intra Picture)帧内编码帧,也叫关键帧,I 帧不需要参考其他帧就可以进行解码。
P 帧:(Predictive-Frame)向前预测编码帧,即需要参考前面的一帧才能进行解码。
B 帧:(bi-directional interpolated prediction frame)双向预测内插编码帧,也叫双向预测帧。即需要参考前面已编码的帧,又需要参考图像序列后面的已编码帧,才能进行解码。
2. GOP
GOP ,Group of Picture ,指的是两个 I 帧之间的间隔。
3. PTS 和 DTS
由于存在 B 帧和 P 帧,因此某一帧的解码顺序和显示顺序有可能是不一样的,因此就有课 PTS 和 DTS 的概念。
DTS, Decoding TimeStamp 解码时间戳,用于告诉解码器什么时候解码。
PTS, Presentation TimeStamp 显示时间戳,用于告诉播放器在什么时候显示这一帧。
4. 帧率
fps, Frames Per second。每秒显示的、传输的帧数。帧率和视频流畅度有关,帧率越大视频越流畅,帧率越小视频就会卡。通常设置帧率为 25 fps,因为当帧率大于 24 fps 时,画面对人眼视觉效果是连续的。
5. 分辨率
分辨率=画面水平方向的像素值 * 画面垂直方向的像素值。常见有1280x720(720P),表示水平方向有 1280 个像素,竖直方向有 720 个像素。对于固定显示的宽高,分辨率越高,图像大小越大,越清晰;分辨率越低,图像大小越小,如果固定宽高大于图像分辨率,那么图像就会变模糊。
6. 码率
bps, Bits per second。指的是每秒传送的数据位数。常见的单位 kbps (k bits per s) 和 mbps (m bits per s) 。帧率越大,每秒传输的帧数越大;分辨率越大,每一帧的内容大小越大;因此帧率越大,分辨率越大,码率就越大。
7. 码流
流的概念实际上指的就是持续的视频数据。比如采集后的视频数据流,常称为裸流,如果是 YUV 格式的,称为 YUV 流。经过 H264 编码的,称为 H264 码流。在视频流处理中,如果从裸流到 H264 码流的过程,称为编码,反之则称为解码。
8.视频编码格式
有了原始数据 YUV 后,因为视频前后两帧图像由很多相似之处等特点,因此原始视频数据还有很大的压缩空间,如果不对原始数据进行压缩,那么由这些原始数据组成的视频就很大,自然在网络传输的时候对带宽的要求就增大。视频编码格式有很多,比如H26x系列和MPEG系列的编码,这些编码格式都是为了适应时代发展而出现的。
其中,H26x(1/2/3/4/5)系列由ITU(International Telecommunication Union)国际电传视讯联盟主导的。
MPEG(1/2/3/4)系列由MPEG(Moving Picture Experts Group, ISO旗下的组织)主导。
H264是目前最主流的视频编码标准,目前大多数的视频和流媒体都是使用这种编码格式。
9.编解码
编码:编码就是将原始音频数据也就是PCM压缩的一个过程;或者是将原始的视频数据RGB或YUV压缩的一个过程。
解码:解码就是编码一个逆过程,比如将编码后的数据AAC解码成PCM给播放器播放;或者将编码后的H264数据解码成YUV或RGB给播放器渲染的过程。
编解码又分为硬件编解码和软件编解码。
软件编解码就是指利用CPU的计算能力来进行编解码码,通常如果CPU的能力不是很强的时候,一则编解码速度会比较慢,二则手机可能出现发热现象。但是,由于使用统一的算法,兼容性会很好。
硬件编解码解码,指的是利用手机上专门的解码芯片来加速解码。通常硬解码的解码速度会快很多,但是由于硬解码由各个厂家实现,质量参差不齐,非常容易出现兼容性问题。
推荐阅读
-
[C 语言教程] [嵌入式程序设计] (I) 简介和先决条件 (II) 嵌入式程序设计基础 (III) 硬件基础 (IV) 硬件寄存器操作
-
消除奇怪的前端错误:1 比特损失导致音频/视频播放时间无限增长 - Http 分路传输的核心分析和坑洞 - 调试程序
-
(01) python-opencv 基础入门(图像读取和视频打开)
-
函数定义和使用的 Python 语法基础 - I. 函数定义
-
音频/视频基础入门:FLV 主题 (9) - 脚本标签简介
-
音频和视频的整体解码过程和同步过程-2.音频和视频同步的整体过程
-
华为 HCIP 实用教程 I】OSPF 相关基础介绍和基本配置,网络工程师必学。
-
下载和播放缓存视频同时进行:一种实现iOS音频和视频播放器的方法
-
Android音频和视频播放/直播功能模块开发
-
如何在JS中获取音频和视频的持续时间并转换时间格式?