音视频实时传输SDK架构与API设计方案

网友投稿 329 2022-11-04

音视频实时传输SDK架构与API设计方案

声网 Agora SDK 资深架构师章真分享了 Agora SDK 的架构设计。

问题与挑战

首先,从场景角度讲,我们会遇到的问题和挑战有哪些呢?

娱乐社交和在线教育:现在不光需要打开 Web 浏览器、摄像头,还需要打开本地的播放器,传输本地播放器的内容。

云游戏加速:现在很多厂商还在开发云游戏,游戏运行于服务端,数据以音视频、指令等形式传输至手机,手机仅仅负责渲染,其中最大的挑战就是延时,如果从服务端到手机的传输延时超过 200ms 的话,游戏体验会变得很差,这就需要一个类似于声网的实时码流加速传输网络。

SIP/PSTN:SIP传统的网络电话,在全球有大量的业务需求,通过网络的流量来达到整个 RTC 的效果。

WebRTC 加速:如果在中国和美国之前通过公网 P2P 沟通,却缺少一个底层网络网和SDK的介入的话,其实是很难工作的。一个没有任何 QoS(服务质量)保障的连接,通话会很糟。

架构与API设计

媒体和网络控制

单一责任法则。假如你有一个 100 人的团队,每个团队都有自己的任务,有做降噪的,有做视频编码的,好的架构是让这些人只需要专注于自身的功能模块的实现,代码如何写,算法如何改进,而不需要去考虑其它模块中的业务。

开闭法则。当你需要开发一个新功能的时候,不需要去修改之前的代码,这是好的架构。

模块可替换。作为一个好的 SDK 架构,SDK 中的任何接口和模块都是可以被无缝替换的。

接口隔离。用户可以清楚找到控制对象或者接口,而不需要理解很多不感兴趣的接口。

最后,依赖反转是特别重要的一点。任何API 都需要面向接口编程,这样一来,用户就不需要去理解模块内部是如何实现的,只需要看接口就行了。

我们的 Pipeline 如上图所示。绿色的是接收端,中间通过 Agora SD-RTN™进行传输。我们会将一些算法、引擎等用 Pipeline 的方式进行组织。基于 SOLID 法则,我们面向各种场景的应用,代码会变得越来越快、越来越方便,算法专家也不用去了解其他模块,只专注于手上的工作。

举个例子,我们有一个叫做 Media Player Kit 的组件,它支持本地媒体播放和多流互动(详见我们此前的文章),如上图是它的架构。Media Player 可以支持本地媒体播放,也可以将本地视频流发送到远端。如果你还记得“API需要讲统一的故事“,就能想象到,Media Player 是一个媒体数据源,可以提供 video track 和 audio track,如果将这些 track 加上 renderer,就可以本地播放,如果把这个 track 发布到 RTC Connection 就可以和远端用户共享了。

Pipeline 就像一个管道一样,一般来说 Pipeline 都是单向的,从管道的入口到出口,但其实Pipeline 里最核心的一些控制是通过负向反馈来做的,这也是控制理论经典的话题。

在架构中,策略层和功能层是要严格区分的。从上图来讲,实线的部分就是数据通道,它提供了视频的采集、编码、传输功能,而下方的模块则是策略层,负责根据网络及设备情况来反馈给功能模块,调整其中的码率、帧率这样的参数。

低延时、高性能、高并发

同时,我们还要对弱网对抗算法进行不断的验证和优化。我们会模拟丢包、模拟延迟,我们在算法上会关注码率跟踪速度、带宽预估准确度。如下图所示,红线是我们的预估值,黑线是验证的数值,两者越接近,说明码率控制得越好。

在高性能方面,我们提出了内存池和线程池的概念。 我们需要根据系统内存情况,自动调整内存池的大小,不同大小的空闲队列需要自动进行负载均衡,同时要有效地减少 malloc/free 调用次数、页错误数量。确保 SDK 在低内存环境中的可用性。在某些服务器推流的场景下,高并发可以极大的降低用户的服务器使用成本。如果每一路通话或者推流都需要一个进程实例的话,在并发情况下,CPU 会消耗在线程切换上。在我们的 SDK 中,我们可以通过线程的方式多开实例,可以极大地降低线程梳理,从而提高并发量。我们也进行了一些测试,业界其他产品在相同机器环境下,并发路只有 600 路,而我们声网的最大并发数可以到达 3400 路。

在我们的SDK中,线程是通过统一的线程池管理的,这种做法既让研发功能模块中,降低并发编程模型的复杂度,有可以让我们的线程数目受控,比如如果模块或者功能团队需要新的线程,需要提出申请,SDK通过注入的方式,将线程给予模块使用。这对于 SDK 的性能改善会很有帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:KubeMeet 新年首站成都开放报名!5 场云原生应用交付开源实践
下一篇:jvm垃圾回收GC调优基础原理分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~