从零开始学习RTC——音视频概述

2022-03-23 创建
2022-03-23 更新
6分钟阅读时长

前言

笔者自加入字节跳动飞书音视频团队以来,已经度过三年半的时间,见证了飞书视频会议产品矩阵从无到有的全过程。不得不说,飞书的发展可以用一日千里来形容。尤其是视频会议在经历过疫情的淬炼之后,整个产品矩阵已经逐步具备成熟toB的能力。

但说来惭愧,笔者至今对音视频核心技术仍然处于只观其形,不知其神的阶段。因此,笔者也希望通过技术博客的方式逐步沉淀关于音视频知识的学习过程。

飞书视频会议主要聚焦在实时通信的场景,即RTC(Real-Time Communication)。RTC是当前音视频业务中难度最高、挑战最大的场景,而且由于RTC相关的成熟技术方案基本属于各家公司的商业机密,市面上流传的书籍也更多属于入门性质,因此造就了深入理解RTC极高的门槛

《从零开始学习RTC》系列文章,将会记录笔者学习RTC的过程。笔者的目标并非是成为RTC相关的技术专家,而是旨在对笔者所能够接触到的RTC知识进行汇总和沉淀,帮助提升自我

音视频产品形态

目前主流的音视频产品形态主要分为:点播直播实时通信

点播

点播
点播

点播(VOD, Video On Demand) 用户通过VOD系统选择自己想要播放的音视频源,选定之后可以通过流媒体的方式即时播放,也可以下载至本地之后播放。点播不要求实时性,因此技术架构上多采用CDN配合加速。

直播

直播
直播

直播(Live) 网络平台以现场即时的方式播放节目内容,用户端订阅之后通过流媒体的方式即时播放,直播又分为普通直播互动直播

对于普通直播来说,主播和观众之间属于单向传播的方式,对实时性要求不高,因此技术架构上多采用CDN配合加速,一般会有几秒甚至十几秒的延迟。对于互动直播来说,主播和观众之间将会产生互动,因此更接近下面将要介绍的实时通信。

实时通信

实时通信
实时通信
实时通信(RTC) 典型应用场景例如视频会议、在线教育、云游戏,也包括上述的互动直播等等。不同于即时通信IM传输的是文本消息和图片,实时通信更聚焦于音视频数据传输。

那么实时通信是如何定义的呢?

ITU-T G.114国际标准可知,当用户接收到的音视频数据延迟超过400ms,将无法忍受网络延迟带来的产品体验。因此,实时通信指代端到端音视频传输延迟在400ms以内的通信场景。

音视频基本要素

音视频的基本要素即声音和视频

声音

声音是一种连续的波,称为声波。声波的本质则是介质的振动,比如空气的振动。我们只需要将这个振动信号记录下来,并用一串数字来记录振动信号的振动快慢和振动幅度,就可以实现声音的记录。

因此,当声波通过空气传播到麦克风的振膜上面,会产生相应的电学模拟信号,再通过模数转换器转换为数字信号,从而完成声音到数字之间的转换过程。

进一步地,通过PCM(Pulse Code Modulation) 脉冲编码调制对连续变化的模拟信号进行抽样、量化和编码转换成离散的数字信号,从而完成音频数据的采集。因此,我们常说的PCM文件是指未经编码封装的音频原始文件或者音频裸数据

视频

图像是由一个个像素基本单元模拟不同的颜色组成,像素数量越多,则图像的视觉效果越接近真实。

视频是基于视觉暂留的原理,当连续的图像变化超过24帧画面以上时,人眼无法辨别单幅静止画面,看上去是平滑连续的视觉效果。

我们知道:光的三原色是红(Red)、绿(Green)、蓝(Blue),通过调整RGB不同的比例,可以模拟出不同颜色,因此RGB也作为一种视频原始数据格式。不过由于人眼对色度的敏感程度低于对亮度的敏感程度,因此实际应用中还有一种更加常见的原始数据格式YUV

音视频完整链路

当声音和视频通过物理学原理和计算机原理,能够被数字化,那么就具备了音视频通信的基础前提。但音视频数据从一端到另一端完整呈现的过程中,还需要经历如下的处理流水线

采集

声音和视频的原始数据,需要通过硬件设备(如:麦克风、摄像头)来进行采集。

音频数据的仿真程度与采样频率相关。一般来说,采样频率越高,还原出来的声音品质越好,但原始数据体积越大。因此,在不同的业务场景下,会采用不同的采样频率来获取体验和流畅性的平衡。

视频数据的仿真程度与分辨率相关。因此,高分辨率的屏幕展示出来的图像效果会更好,但同音频数据一样,原始数据的体积也就越大。

前处理

音频数据可以进行3A(AEC、AGC、ANS) 算法处理,从而达到回声消除、降噪等等品质优化,还有其它如美声、变音、混响、语音识别等等功能性质的处理。

视频数据可以进行美颜、滤镜、人脸识别、手势识别、3D动效等等功能性质的处理。

编码

由于音视频原始数据的体积非常庞大,不适合直接在互联网上面传输。因此,编码是至关重要的。编码是指将原始音视频数据通过特定方式转换成更加合理的格式,从而达到缩小传输体积的目的。

音频数据可以利用频域掩蔽和时域掩蔽等等原理进行编码压缩,视频数据可以利用空间冗余、时间冗余、编码冗余(信息熵冗余)、视觉冗余、结构冗余等等原理进行编码压缩。

封装

将已经压缩之后的视频轨和音频轨按照一定的格式放到一个文件中,其实仅仅是一个外壳。常见的封装格式有:MP4、MKV、FLV、AVI等等。对于RTC的场景来说,是不需要这一步的

传输

将成品音视频文件或者数据通过互联网进行传输,如果是RTC实时通信场景,还需要保障端到端延迟的时间。当前最有名的RTC开源项目:WebRTC 就包括一系列网络建立和传输的协议和具体实现。

解封装

将音视频文件重新复原成为编码之后的格式。

解码

将编码格式的数据进行解码,还原原始数据。

后处理

可以对解码之后的数据进行一些后处理,例如进行转码合流,从而满足一些特殊的业务场景,例如:SIP/PSTN。

渲染/播放

通过播放器对最终的数据进行展示播放,音视频播放过程还涉及到音画同步问题。

音视频质量评价

音视频质量评价是衡量一个音视频产品好坏的核心,通常对音视频质量的评价分为主观评价客观评价

主观评价

主观评价即人工测评,对于音频和视频分别基于以下表格中的检测点进行主观判断。主观评价有意义,但是相对来说不具备说服力,也不具备自动化的能力。

客观评价

客观评价即代码测评,通过对音频和视频分别不同的方式来进行评分,具备横向竞品比较的说服力和自动化的能力。

音频

通信行业通常采用 POLQA 标准来衡量音频的品质,它通过一系列算法评估,最终输出一个MOS分来衡量音频的好坏。

视频

视频的品质衡量通常有如下的指标:

参考

  1. 搞定音频技术
  2. 攻克视频技术

总结

本文作为《从零开始学习RTC》系列文章的开篇,对音视频产品类型、处理流水线和质量评价进行了总体概述。音视频领域的知识点浩如烟海,笔者希望能够坚持不懈,持续积累与学习!

Avatar
吴国华 Go语言/微服务/后端/云原生/技术管理