前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实时音视频开发学习2 - TRTC底层实现机制

实时音视频开发学习2 - TRTC底层实现机制

原创
作者头像
金林学音视频
修改2020-08-24 18:22:38
3K1
修改2020-08-24 18:22:38
举报
文章被收录于专栏:实时音视频TRTC从小白到熟练

TRTC技术基础概念

以上是对腾讯云TRTC产品的一个基本概述,既然知道了这个东西功能这么丰富,拿它涉及了一些什么基础技术,又是怎么实现这个音视频的原理呢?以下便是对其的一个详解。

什么是音视频技术?音视频技术就是用计算机来处理人“看”和“听”的技术,也称视听技术。音视频技术依赖于终端设备的输入、输出处理,而数据的处理又需要与硬件相关,不过这都是后话。

基础解释之视频

视频泛指将一些列静态影像以电信号的方式加以捕捉、记录、处理、存储、传送与重现的各种技术。简单理解就是一连续的图像集合以超过人眼能识别的速度进行播放,就形成了视频。

视频包含视频帧,可以理解为一张图片。帧率,即单位时间内帧的数量,单位为fps。我们通常遇到的帧率有24/25fps,这也是一般电影的帧率。而30/60fps为游戏帧率,此时画面比较逼真,但是当帧率高于85fps后,人眼基本无法察觉,也就没有多大的意义。

视频还拥有彩色,这里主要为RGB和YUV解释,RGB为三原色,通过它们之间的融合能形成大千世界的各种色彩;而YUV则是亮度值和颜色通道的集合,Y包扩亮度和少量绿色通道、U包含蓝色通道和亮度差值以及V包含红色通道与亮度差值,而事实上人眼对亮度的敏感是高于对色度的,因此,通过压缩UV的分辨率,就能在不影响观感的前提下,减小视频的体积。

我们用分辨去描述一个视频的大小,可以理解为屏幕的宽高,视频中的内容清晰度由像素去衡量,而像素包含一个个像素点,每一个像素点又由RGB三原色构成,每一个颜色包含8位。因此每一个像素点是24bit。

基础解释之音频

音频,通俗来说就是声音,是任何能发出声音媒介的集合。同时音频也是一种波,会随着你的声音响度的起伏而变大或变小。而波就拥有自己的振幅和频率,但是自然界,声音是一种模拟信号,我们需要保存就应该将其转换为电信号,从而进行一些列操作。

声音在模数转化中需要进行采样-->量化-->编码的过程。采样遵循奈奎斯特定律:为了不失真地恢复模拟信号,采样率频率应该不小于模拟信号频谱中最高频率的2倍。而我们的声波最高为20kHz,所以采样率一般为44.1~48kHz。量化是因为模拟信号并不是一个连续的振幅变化,只能选取一个比较近似的整数值,为了获取这些振幅值,采样器或采用一个固定的位数来记录这些振幅,通常有8位、16位、32位,位数越高,记录的值越准确。

由于计算机只能识别0/1的数字信号,因此需要将量化后的振幅数据转换成二进制数据。此外,一个音频的采集也和声道数量有关系,声道数越多,采集信息越全面,主要为单声道、双声道以及立体声道。声音的传输速率用码率来衡量,即每秒中能通过的信息量:码率=采样率*采样位数*声道数。

基础解释之音视频全流程

前两部分基础主要让用户对视频和音频有了一个初体验,这一节内容主要讲述音视频的原理,以下为音视频的原理图:

音视频采集

从设备中获取音频的原始数据的过程称之为采集。音频的采集需要通过输入设备,输入设备可以分为硬件方面,如麦克风、扬声器等,也可以是软件方面,如一段音视频区域。

音频的采集过程,首先是通过麦克风设备将环境中的模拟信号采集成PCM方式编码的原始数据,其中PCM数据记录下的是原始波形的强度;下图电容式麦克风采集流程:

以下是麦克风采集出来数据的波形:

但是在进行PCM脉冲式编码之前还需要进行模数转换,这在基础解释之音频中解释了。

音频帧大小是按照音频帧时长来定的,但不同编码格式音频时长不一致,AAC编码下是1024个采样点为一帧,时长大约22.32ms;Opus一般采用点位960、48kHz下采用时长为20ms。两个计算式子:

音频时长=采样点个数*1000/采样率

音频大小=采样率*声道数*位宽*音频时长/8

视频预处理

视频预处理功能:如美颜美白、视频水印、滤镜、缩放、裁剪等。

美颜主要是通过「磨皮+美白」来达到整体美颜的效果。磨皮的技术术语是「去噪」,也即对图像中的噪点进行去除或者模糊化处理,常见的去噪算法有均值模糊、高斯模糊和中值滤波等。

旋转缩放,原始视频数据可能并不是我们想要的大小,此时需要对其进行一定的调整。大多数安卓摄像头原始视频是旋转了270度,并且硬件设备里面也可能存在旋转问题,因此需要进行旋转操作。

水印是图片和视频内容中常见的功能之一,它可用于简单是版权保护,或者进行广告设置。国家相关部门也规定视频直播过程中必须打上水印,同时直播的视频必须录制存储下来保存一定的时间,并在录制的视频上打上水印。

滤镜的目的将图像中所有像素点的颜色值设置为目标颜色。滤镜最重要的一步是颜色映射。颜色映射是指将原来照片中的每一种颜色,通过某种映射方法转换成另一种颜色。

音频预处理

音频处理的方法主要包括:ANS音频降噪、AGC自动增益控制、AEC回声抑制、静音检测、混音和声音特效等。

音频降噪的专业表述是噪声抑制(Audio Noise Suppression)。手机等设备采集的原始声音往往包含了背景噪声,影响听众的主观体验,降低音频压缩效率。噪声抑制的作用是探测出背景固定频率的杂音并消除背景噪音。

AGC的全称是Automatic Gain Control,即自动增益控制。自动增益控制是指使放大电路的增益自动地随信号强度而调整的自动控制方法。

AEC的全称是Acoustic Echo Cancellation,翻译为中文是回声抑制。其原理是对扬声器信号与由它产生的多路径回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断地修改滤波器的系数,使得估计值更加逼近真实的回声。然后,将回声估计值从话筒的输入信号中减去,从而达到消除回声的目的。

静音检测的基本原理:计算音频的功率谱密度,如果功率谱密度小于阈值则认为是静音,否则认为是声音。

混音指人声和背景音乐混合在一起。在直播场景中,主播经常需要播放背景音乐。为了保证背景音乐的音质以及音量,基本都是对麦克风采集的声音和本地背景音乐的采样率进行叠加操作。

声音特效是指对声音进行变声变调的操作。可以将设备输入的原始音频数据进行各种变化,形成萝莉声、大叔声、空灵声等。

视频编解码

视频编码指使用编码器对原始视频数据进行压缩操作。

视频的编码层次由6个部分组成,分别为序列、图像组、图像、条带、宏块以及块组成。其中序列层位于最高级,块层处于最底层,具体排列模式如下

在序列层结构遵循IBBP序列编码对象,由序列、序列起始码、序列头以及序列结束码构成;图像组层中将I、B、P帧每两个I关键帧进行分组;每个组包含一个图像的起始码和图像的头,图像头中记录了图像的信息,如编码类型、图像距离等;每个图像用条带进行划分,每个条带上用16*16的宏块进行编码,而每一个个宏块又可以分为一个个编码快。

视频采用的编码技术为空间冗余、时间冗余、编码冗余、视觉冗余等。

空间冗余利用图像画面中相邻像素之间的相关性,对于视频的连续播放过程,图片存在很多类似的像素,如果对其全部存储必然造成内存的浪费。时间冗余是指多张图像之间,有非常多的相关性,由于一些小运动造成了细小差别,如小求在空中的运动,在一秒和2秒之间画面中只有小球的轨迹发生变化而其余图像几乎保持不变。如果一个图像的灰度级编码使用了多于实际需要的编码符号,就称该图像包含了编码冗余,如用高位来对单一颜色进行编码,其实际上是对编码的浪费。人的视觉系统对某些细节不敏感,例如在高亮度下,人的视觉灵敏度下降,对灰度值的表示就可以粗糙一些。对于太强太弱的声音,如果超出了“阈值”,人们听觉感受也会被掩蔽。利用感官上的这些特性,也可以压缩掉部分数据而不被人们感知(觉察)。

编码方式采用h.264编码。H.264也叫AVC(Advanced Video Coding),是一种高性能的视频编解码技术。H.264具有低码率、高压缩、高质量的图像、容错能力强、网络适应性强等特点,它最大的优势拥有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的两倍以上。

H.264编码原理

在H.264协议里定义了三种帧,完整编码的帧叫I帧(关键帧),参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H.264编码采用的核心算法是帧内压缩和帧间压缩。其中,帧内压缩是生成I帧的算法,它的原理是当压缩一帧图像时,仅考虑本帧的数据而不用考虑相邻帧之间的冗余信息,由于帧内压缩是编码一个完整的图像,所以可以独立的解码显示;帧间压缩是生成P、B帧的算法,它的原理是通过对比相邻两帧之间的数据进行压缩,进一步提高压缩量,减少压缩比。

帧的分类

中文

意义

I帧

关键帧

I帧通常是每个GOP(Group of Picture)即图像序列的第一个帧,经过适度第压缩,做为随机访问的参考点,可以当成图像。I帧可以看成一个图像经过压缩后的产物;

P帧

向前预测帧

通过充分将低于图像序列中前面已编码帧的 时间冗余信息来压缩传输数据量的编码图像,也叫预测帧

B帧

双向预测帧

既考虑与源图像序列前面已编码帧,也顾及源 图像序列后面已编码帧之间的冗余信息来压 缩传输数据量的编码图像,也叫双向预测帧

音频编解码

音频编码指使用编码器对原始音频数据进行压缩,常见的编码器有MP3编码、AAC编码、WAV编码、OGG编码,这里主要了解AAC编码。

AAC编码

AAC实际上是高级音频编码的缩写。AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质

AAC音频格式有ADIF和ADTS:

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

文件封装

声音与画面在采集、预处理、编码的过程中,都是分开进行处理的,但实际播放的时候,需要将声音和画面同时展示,因而需要将音频和视频编码后的数据打包到一个文件里。存放音视频内容的叫做封装容器,文件类型叫封装格式。

常用的文件封装格式为MPEG和WAV。MPEG格式(文件后缀可以是.mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)即运动图像专家组格式一共有四种格式,压缩效率非常高,MPEG的平均压缩比为50∶1,最高可达200∶1。同时图像和音响的质量也非常好,并且在电脑上有统一的标准格式,兼容性相当好。

WMV格式是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV格式的主要优点包括:本地或网络回放,丰富的流间关系以及扩展性等。但是缺点需要使用安装Windows Media Player(简称WMP)才能播放。

文件推流和拉流

推流是指将编码后的数据传输到服务器,由服务器进一步做数据转发,转发可以是点播上传、直播推流、本地文件或低延时传输。

拉流主要是从文件下载、直播拉流、本地文件和低延时传输获取音视频数据,再通过对应的输入方式,文件下载是http:/进行音视频分离。

音视频数据体积通常很大,传输的时候是连续不断的多媒体流量,因此通过网络传输音视频数据的技术叫做流媒体技术,传输时使用的协议就称为流媒体协议。

音视频在传输过程中最容易受到的影响:网络抖动,即原本应该发/收的数据包却没有发/收,变产生了网络抖动。判断网络是否抖动从丢包率是否增加、RTT是否延长或者发送率是否下降。其中RTT用以描述收发时间,用于表示网络延时,发送率用于表示带宽,即网口允许收发的数据量大小。

为解决网络抖动,提升平稳性,在音视频处理过程中设置一段缓冲空间,这便是JitterBuffer。它一头链接编解码器,一头链接网络协议栈,在生产和消费者之间充当中间货仓。

JitterBuffer优势:

l降低网络轻微抖动引起的卡顿

l平衡编解码器和网络协议栈的数据供求量

l动态调整数据收发量,在一定能力范围内控制数据收发平稳性 其处理流程图:

音视频播放

原理:读取流/文件->解复用(demux)->音视频解码(decode)->渲染

播放过程:

在音视频数据解码之后,可以得到视频像素数据(一般为YUV420或ARGB式)和音频采样数据(一般为PCM数据)。视频数据要经过渲染之后才能显示,一般可以使用OpenGL、Direct3D等来做视频渲染,然后再送显到相应的窗口或View(SurfaceView或TextureView等)显示出来。

播放时音频同步问题:

由于每一个音频帧和视频帧都带有初始值相同的时间戳(PTS),PTS标记的是将此帧数据进行渲染展示的时间戳。于是我们可以将音频时长固定,令其PTS稳定增长,并作为参考时间轴,并将PTS相近的视频帧与参考时间进行展示,如果匹配一直则音频同步。

基础解释之LiteAVSDK包

了解了音视频的整个工作流程之后便能开始运用TRTC产品,在使用前首先对一些基本概念进行解释。

应用:

TRTC通过应用的形式来管理不同的业务或项目。您可以在TRTC控制台给不同的业务或项目分别创建不同的应用,从而实现业务或项目数据的隔离。

SDKAppID:

腾讯云后台用来区分不同TRTC应用的唯一标识,在TRTC控制台创建应用时自动生成。不同SDKAppID之间的数据不互通。

UserID:

UserID(用户标识)用于在一个TRTC应用中唯一标识一个用户。

RoomID:

用于在一个TRTC应用中唯一标识一个房间。RoomID是由开发者自行维护和分配的一个uint32范围内的数字,取值区间:1 - 4294967295。

UserSig:

腾讯云设计的一种安全保护签名,用于对一个用户进行登录鉴权认证,确认用户是否真实,阻止恶意攻击者盗用您的云服务使用权。开发时会对其封装一个方法

LiteAVSKD包介绍:

LiteAVSKD引擎框架包含各播放器的API和LiteAVCore两部分:

LiteAVSDK能力划分:

LiteAVSDK版本关系:

一般解决一些基本业务使用全功能的专业版本即可,如果需要加上AI动态特效就需要使用商业版本。

注:更多内容请关注腾讯云的实时音视频

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TRTC技术基础概念
    • 基础解释之视频
      • 基础解释之音频
        • 基础解释之音视频全流程
          • 音视频采集
          • 视频预处理
          • 音频预处理
          • 视频编解码
          • H.264编码原理
        • 音频编解码
          • AAC编码
        • 文件封装
          • 文件推流和拉流
            • 音视频播放
            • 播放过程:
            • 播放时音频同步问题:
          • 基础解释之LiteAVSDK包
            • LiteAVSKD包介绍:
            • LiteAVSDK能力划分:
            • LiteAVSDK版本关系:
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档