乐趣区

关于api:影响音视频延迟的关键因素二采集前处理编解码

上一篇,咱们剖析了 5 种流媒体零碎与音视频提早的关系。明天,咱们将依照数据的流动步骤,剖析每个环节是如何影响音视频时延的,首先分享的是音视频“采集、前解决、编解码”这三个局部是如何引入时延,以及咱们的优化计划。

媒体数据流动步骤:

采集:把模拟信号变成数字信号;

前解决:包含 3A 之类的,把它变成污浊的信号;

编码:将信号送给编码器做编码编成码流,做数据压缩;

传输:把码流通过网络传输到对端;

抗抖动:对端在播放时要思考晦涩,卡顿的时候没法用,因而要做缓冲;

解码:当有肯定数据积攒后给解码器解码;

后处理:复原信号后有的产品会须要做后处理(通常不须要);

渲染:最初交给设施做渲染,实现音频播放视频播放。

下面整套流程的每个环节都会引入时延,咱们能够针对每一环节去做优化。

1 采集

音视频采集环节的提早,与硬件设施、采集的参数配置相干。在即构侧来说,咱们是和操作系统的接口打交道。在音频采集时,咱们须要思考音频采样频率,每一次 API 返回的采样点数。比方:

如果咱们以 44.1K 赫兹去采样,零碎 API 每次返回 1024 个点的数据,那么就有 23.2ms 的提早,再加上一些设施的提早,最终的提早会大于 23.2ms。如果以 48K 赫兹去采样,零碎 API 每次返回 192 个点的数据,提早只有 4ms。

但也不是越短越好,这里须要针对利用场景做衡量,很多状况下缩小采集帧长的意义不大,一方面编码的帧长有要求,另一方面可能会减少 CPU 开销。并且发送封包须要加包头,帧越短,须要拼帧做编码,payload 占比太小,意义没那么显著,甚至会减少额定开销。

2 前解决

第二个是前解决。比方实时音频的回声打消、噪声克制、自动增益 3A 解决;语聊场景的变声;实时视频的美颜、挂件、磨皮、瘦脸等。这些都会产生时延,咱们能够从两个角度来看时延的产生:

第一个是算法的固有时延,在上面的图片中,原始数据是蓝色的曲线,咱们想通过 FIR 低通滤波给它做平滑解决,能够看到这个成果是不错的,它的确变平滑了而且它的波形没有太大变动,然而咱们也能够看到它整体向右移了,这其实就是算法的固有时延。

第二个就是计算时延,尤其是对视频来说有更大的挑战。通常咱们会把这个计算交给 GPU,那么 GPU 就有额定的累赘,这是一个异构的计算,咱们要把数据给 GPU,再把数据从 GPU 拉下来,这里是须要同步的,咱们发现会有 10%-20% 的提早。而为了失去这么大的吞吐量肯定要依附 GPU,因此这个是防止不了的。

3 编解码

这是比拟重要的局部,这里次要指的是信源编码。信源编码的次要目标是压缩,把传输所须要的字节数压缩缩小,它须要衡量几个方面的货色:第一个是品质,第二个是码率,第三个是时延,第四个是吞吐。在等同码率下,一个编码方案引入的时延越高,通常来说品质会越高。

咱们能够看看常见的编码方案对提早的影响:

首先是音频的编码方案,以咱们罕用的 HE AAC 编码方案和开源的 OPUS 计划为例,HE AAE 零碎设计会引入 129ms 的固有时延,而 OPUS 能够做到 10ms 内,通常咱们在低提早的时候会抉择 OPUS。

在视频编码方面,H.264 是目前广泛应用的规范,它有多种编码类别,像 baseline profile、main profile 等,这两种编码最大的区别是 baseline profile 只产生 I 帧和 P 帧,而 main profile 除了 I 帧和 P 帧外还会产生 B 帧,B 帧是双向参考帧,它会参考将来的数据,当编码帧率是 20 帧每秒,一个 B 帧将引入 50ms 的额定提早。因此在实时通信场景中,咱们通常都是用 baseline profile。

另一方面,不同的编码实现对品质与提早都会产生影响,以视频编码为例。咱们要思考是用软件实现编码还是硬件实现编码,软编通常成果会比硬编好,一方面软编有十分多的策略去做晋升优化,另一方面软编的时延通常会比硬编的低。

当然也不是说软编就能完爆硬编,硬编的吞吐量大,当分辨率很大、码流很大的时候,软编是 hold 不住的,所以还是要依赖硬编。而硬编又依赖于具体的芯片实现,在某些芯片的实现上,硬编可能会达到 70ms 的提早,而硬解可能会达到 130ms 的提早,这和芯片性能相干。

以上就是采集、前解决、编解码环节,时延是如何造成的。第三篇咱们将分享在传输、渲染环节,有哪些影响时延的因素。

退出移动版