语音通话功能、视频通话功能,在一些 IoT 设备上已经不罕见。例如:

  • 智能手表:“能打电话”已成很多儿童智能手表的标配,而“能视频通话”的智能手表已经纷纷出现在海内外市场上。
  • 智能眼镜:基于实时音视频与后处理技术(如 AR、计算机视觉算法)可以实现多种场景
  • 智能摄像头:安防监控、视频交互一直是智能摄像头的重要功能
  • 机器人:家庭机器人及少数公共场所的机器人,需要实时音视频功能
  • 智能门禁:通过实时音视频实现远程安防、通话

这可能只是冰山一角,随着硬件洗能、软件系统和网络连接环境的提升,未来还会有更多类型的设备会开始提供实时音视频功能。

如果我们曾利用 WebRTC 或商业方案,在手机上实现了实时音视频通话,那么我们是否可以将它照搬到 IoT 低功耗设备上呢?

答案是“不能”。

低功耗智能设备在硬件、软件方面都与手机不同,所以对实时音视频通信的要求也有所不同,这导致了手机的方案无法直接拿来就用。目前来讲,在 IoT 低功耗设备上做音视频通话,需要满足以下要求:

1. 功耗要低

很多低功耗智能设备的电池容量,以及可支持的功率有限。同时,很多智能设备采用的 CPU 性能有限,在进行音视频通话的同时,还要支持系统、常驻功能的运转。一般的解决方案,无法做到较长时间的视频通话,最大的障碍就在于功耗。随着通话时长的积累,高负荷运转的设备会发热。所以保证音视频方案的低功耗,是能提供稳定、良好用户体验的基础。

2. 实时音视频不可占用过多内存

智能设备的内存有的高,有的低,要看是什么类型的设备。像智能手表这类产品的内存一般都不高。在这种情况下,如果音视频通话方案设计得不好,占用过多资源,那么可能都无法运行起来。对应问题大家在开发电脑、手机应用时也应该遇到过,但在低功耗、低内存的设备上,更难解决。

3. 跨平台、跨设备的通话支持

智能设备并不像手机这样普及,所以当你在通过智能手表、智能眼镜与他人通话时,对方所使用的可能是手机或 Web 浏览器。所以当你支持低功耗设备的同时,还需要将它的音视频通道与 Web 浏览器端、Native 端打通。

4. 提供高音质高画质体验

音视频通话的质量始终是关键,画面的卡顿、模糊,声音出现回声、噪声都是用户无法接受的。但是,一套音视频方案在别人的智能手表上跑通了的时候,并不意味着完全能用于你的设备。

还是以 WebRTC 为例,它本身具备回声消除模块,但一个回声消除算法的设计实现与设备、系统状态紧密相关。我们曾经在一篇文章中讲过。声音经过扬声器传导到麦克风,经过了多少路径就被处理多少次。不同的设备材质,甚至设备发热,都会导致声传导特性不一样,都会导致回声消除算法不一样。这是设备的差异带来的影响。

另一方面,回声消除里有两大模块,自适应滤波和非线性处理。自适应滤波前置第一个模块就是延时搜索。延时估计要在一定范围内估计,就是要有一个预先设计的delay值,如果在一个很大的范围内搜索,会极大消耗CPU资源。而Android系统的线程调度设计存在特殊性,一旦资源抢占,会在Android底层buffer产生延时,可能会导致之前预设的delay值不准。而低功耗智能设备的系统存在很多细微差异,就更需要有针对性地优化算法了。

所以,在低功耗智能设备上实现视频通话,并不是用一套通用的 demo,通过短短几步的配置、接口调用就能实现的。想要好的通话体验,都需要围绕你的设备进行调优。这也是难点之一。

解决方法

从我们自己的经验来讲,我们针对低功耗设备的硬件、软件系统的特点,优化了编码算法、降噪算法,同时为了满足在 IoT 设备上的帧率、分辨率,还进行了算法优化。最终,推出了低功耗版本 Agora SDK ,支持低功耗智能设备与其它设备与平台进行视频通话。