现在的短视频,云音乐非常火爆,本文梳理一些音视频方面的常识。
我们知道音频信号有数字信号和模拟信号之分,数字信号即信号被数字化成0-1的数据流进行呈现。
通过硬件设备将数字信号还原成物理信号,人耳故能接收。
本文总结的是一些基本的音视频概念
- 采样率。
首先看看什么是采样,声音是个波,有频率和振幅,频率对应时间线,振幅对应平轴线
为什么要采样,波线是连续无穷的,而计算机存储空间有限,因为需要在波形线各个点采样模拟真实信号。一旦采样,必然对原始信号有损失。
人耳对声音频率的感知是 20kHz,为了对波形能较好复原,一次震动必须要2个点采样,因为一般采样一秒最少40k次,表示为 40kHz —— 这就是采样率。
CD 采样率一般是 44.1kHz 为什么是这个数字?40k最低,兼顾生理异常者提高了10% 是 44k,同时增加了100Hz是为了抵消最高频率时的频率共振
一般是 48kHz 和44.1kHz的整数倍
采样大小 量化:我们这里的采样大小就是量化的过程, 将该频率的能量值并量化,用于表示信号强度。量化电平数为 2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。
无损有损
最高保真:PCM编码 所谓的无损编码
声道:
码率计算公式
码率 = 采样率值 × 采样大小 × 声道数 bps
kbps / 8 = KB/s
为什么要音频压缩
1.节约空间, 不压缩的话一秒传输 一个PCM信号大约是 10.34M,目前大多数带宽无法满足这个运输效率,因此需要编码压缩,或降低采样率和采样大小
PCM:
优点:音质好
缺点:体积大
MP3 可以边放边读
各种音频编码
PCM
WAV
MP3 只能2声道 支持流 支持VBR
OGG 支持多声道 也支持 VBR
WMA
APE
AGC 自动增益控制 调节语音的响度
最简单的硬性增益处理是对所有音频采样乘上一个增益因子,它也等同于在频域每个频率都同时乘上这个增益因子,但由于人的听觉对所有频率的感知不是线性的,是遵循等响度曲线的,导致这样处理后,听起来感觉有的频率加强了,有的频率削弱了,导致语言失真的放大。
就必须在响度这个尺度下做增益,而不是在频率域,即按照等响度曲线对语音的频率进行加权,不能采用一个固定的增益
因子进行加权。
由些可见,语音的自动增益处理可以大致分为两个部分:
(1)响度增益因子的确定。
(2)把响度增益因子映射到等响度曲线上,确定最终各频率的增益权重。
AEC 回声消除
通过自适应算法来调整滤波器的迭代更新系数,估计出一个期望信号,逼近经过实际回声路径的回声信号,也就是去模拟回声信号,然后从麦克风采集的混合信号中减去这个模拟回声,达到回声抵消的功能
ANC 噪声消除
前馈有源噪声消除 : 噪声被采样进入信号处理电路,被计算出一个反噪声,人耳从扬声器听到的声音被抵消了噪声,听不到了
这种方式有风噪问题
反馈有源噪声消除,采样的是耳机输出
GoP值
FPS 每秒帧数
关键帧 关键帧间隔是对视频压缩算法来讲的,视频每秒由几十甚至上百张图片组成,形成连续的画面,但是在短时间内大部分图片其实是相似的,压缩的原理就是只保留前后帧之间的不同信息(B帧除外),第一张因为没有参考对象,需要完全保留信息,也就是I帧,I帧信息量相对比较大,可以理解成JPG图片,后面的图片可以参考I帧只保留不同信息,也就是P帧,这样就达到视频压缩的目的。一个I帧后面可以带多个P帧,每个P帧需要参考前一个图片才能还原。
GOP值就是I帧出现的频率,太小的话I帧出现次数多,对码率控制压力大,GOP太大后面的P帧就会模糊,如果网络传输中P帧丢失部分数据,就会导致后面的画面数据出错,需等到下一个I帧才能正常。Ucast APP GOP值是以秒为单位的,建议设置3秒。当然,也可以根据网络情况自行设置。
直播卡顿的原因
- 设备
高清视频往往会给硬件带来解码压力,由于解码造成的卡顿尤为明显。同时如果PC端Flash Player或移动端播放软件版本过低,可能也会造成解码问题导致播放卡顿情况。
如果是这个原因,解决方法有以下几点:
升级硬件、软件设备,提高兼容性和容错率;
使用硬编硬解方案,充分利用GPU 加速;
降低视频码率,选择流畅或者标清画质进行视频播放;
增大播放器缓冲区,缓解因网络或解码不稳定引起的卡顿。
2.1 音视频时间戳不同步
在直播中,当音视频时间戳不同时,会影响画面渲染,导致画面解析时出现问题,造成一卡一卡的现象,如下图所示,音视频时间戳非单调递增会导致播放器在解析画面时出现错乱的情况,前后画面衔接会出现不连续甚至花屏的现象。
音画不同步
针对此类问题,我们需要对推流器的源码进行研究,把读取到的每一针音频、视频的时间戳进行查阅、分析,然后通过程序干涉推流器或者流媒体服务器,矫正逻辑值,从而使音画同步。
如果视频的帧率设置过低(帧率即每秒的画面张数),根据人眼的视觉暂留原理,每秒的画面张数必须达到一定的数值,人眼观看才是连续有效的。导致视频流的编码方式与传输服务器有不兼容的情况,部分音视频数据出现了解析错误甚至无法解析的情况,也会出现视频流播放卡顿的问题。
如果是这个原因,解决方法有:
设置合理的码率,帧率,分辨率,关键帧间隔,音视频编码格式等参数;
尽量遵循标准的视频编码方案,流媒体传输协议,对视频流进行采集,编码,解码,播放等操作。
- 网络
直播网络目前存在三种情况:无线、有线、4G。
无线网络:WIFI 连接的直播受距离、环境等使用因素的影响,需要让设备尽量靠近 WIFI 信号源,避免穿墙或金属物遮挡,保持信号强度,带宽6M以上,同时避免其他设备接入 WIFI 信号源抢占信号;
有线网络:直播场地有专门的网口使用,最好是专线网络,上下行带宽不少于4M;
4G网络:手机网络受到周围的环境影响大,需要在手机信号良好的地方,并且防止网络波动,在直播时最好选择4G卡。
观众播放端的网络也可能存在波动问题,需要定位是否是大面积的观众卡顿还是局部观众卡顿。
解决方法有:
用户通过 speedtest 进行测速,判断终端的网络速度;
用户 ping 播放域名,查看解析到的服务器节点,判断自身IP 到服务器之间是否有延迟过大或者丢包的情况出现;
联系 CDN 厂商排查线路是否有不稳定的现象,也可以通过播放器打点上报,统计所有客户端的整体卡顿率情况,分地区做一些线路和资源的调整和优化。
观众播放端的网络也可能存在波动问题,需要定位是否是大面积的观众卡顿还是局部观众卡顿。
解决方法有:
用户通过 speedtest 进行测速,判断终端的网络速度;
用户 ping 播放域名,查看解析到的服务器节点,判断自身IP 到服务器之间是否有延迟过大或者丢包的情况出现;
联系 CDN 厂商排查线路是否有不稳定的现象,也可以通过播放器打点上报,统计所有客户端的整体卡顿率情况,分地区做一些线路和资源的调整和优化。
一场直播需要保证音视频数据的实时传输,推拉流稳定,高并发人数下的系统稳定性,现在国内的直播平台多选择CDN厂商进行直播底层业务支撑,当直播观看人数并发较大时,常会给服务器负载造成压力,带宽数据量大,传输缓慢,导致卡顿。
目前,国内的CDN厂商基本都提供检测工具,可以在控制台查看CDN情况的使用情况以及各省份的服务器的下载速率和负载情况,如下图是又拍云的服务监控后台,图中可以看到整体的健康度以及各省份的服务器平均下载速率。
RTC
不同于RTMP、RTSP 等「尽力而为」的网络协议,它们只解决网络问题;RTC 是一个面向视频交付的协议,联动传输和编解码,形成可靠的视频交付。因此,抗弱网技术是实现全场景交付的支撑性技术。
抗丢包算法
视频毛玻璃
花屏的原因
丢包重传
码率自适应
是指把原始参考音视频与失真音视频在每一个对应帧中的每一个对应像素之间进行比较。准确的讲,这种方法得到的并不是真正的视频质量,而是失真音视频相对于原始音视频的相似程度或保真程度。最简单的方法如均方误差 MSE 和峰值信噪比 PSNR,其应用比较广泛
https://developer.baidu.com/article/detail.html?id=294038
https://blog.csdn.net/agora_cloud/article/details/120139733