RTC纯通道接入方案

更新时间:
复制 MD 格式

本文将介绍如何仅利用阿里云ARTC SDK,将RTC作为传输通道来实现AI实时互动的接入方案。

背景概述

AI+RTC领域,阿里云为客户提供两种接入方案:

  • AI实时互动端到端方案,详细内容请参考AI实时互动快速入门

  • RTC纯通道接入,AI服务编排需要您自己实现。

AI与实时通信(ARTC)技术的深度融合背景下,本文主要介绍方案二,针对那些希望利用RTC技术进行音视频传输并需要高度定制化AI处理的应用场景。您可以借助阿里云的ARTC SDK支持,在客户端和服务端之间建立高效且稳定的音视频数据传输链路,并且在此基础上自由添加或集成所需的AI功能。

方案说明

目前阿里云为您提供以下两个SDK,帮助您完成客户端和服务端之间的音视频传输:

  • 客户端上的ARTC SDK,包括Android、iOS、Windows、H5。

  • 服务器上的Linux SDK。

纯语音场景

在纯语音场景下,阿里云推荐的架构如下:

image

在上述架构中,ARTC SDKLinux SDK进入同一个RTC房间。Linux SDK会接收来自ARTC SDK的音频流,以及将解码后的音频数据传递给业务层。您也可以根据需求对音频做AI服务编排,经过ASR、TTSLLM处理后,最终将编码前的音频数据发送至Linux SDK。Linux SDK完成编码后,将其发送回ARTC SDK,供应用程序播放或渲染。

数字人场景

在数字人场景下,阿里云推荐的架构如下:

image

在上述架构中,ARTC SDKLinux SDK会进入同一个RTC房间。Linux SDK会接收来自ARTC SDK的音视频流,以及将解码后的音视频数据传递给业务层。您也可以根据需求对音频做AI服务编排 ,经过ASR、TTS、LLM和数字人处理后,最终将编码前的音视频数据发送至Linux SDK。Linux SDK完成编码后,将其发送回ARTC SDK,供应用程序播放或渲染。

如果您的数字人是外采的,并且服务不是部署在自己的后端服务器,此时阿里云推荐的架构如下:

image

在这个架构中,客户采购的数字人供应商集成阿里云的Linux SDK,将数字人的音视频数据(PCM+YUV)发给Linux SDK,Linux SDK经过编码后将Opus+H264通过阿里全球通信网发送给终端用户。此时一个RTC房间有3个参与者,其中包括终端用户以及2Linux SDK。

功能实现

播报欢迎词

AI实时互动过程中,某些场景涉及客户端应用程序与服务端AI语音助手的首次连接。在此情况下,AI语音助手需要向客户端用户播报欢迎词。例如,在语音通话场景中,应用程序用户接通通话后,服务端AI语音助手会向终端用户播报“你好,有什么可以帮您”的欢迎词。在此情况下,通常要求服务端播报的欢迎词在客户端上能够完整播放,确保不出现丢失、截断或吞字等问题。

交互流程图

image

代码实现

客户端APP调用RTC SDK接口设置

您需要调用RTC SDK接口,将音频场景设置为ChatroomMode

Android

engine.setAudioProfile(AliRtcEngine.AliRtcAudioProfile.AliRtcEngineHighQualityMode, AliRtcEngine.AliRtcAudioScenario.AliRtcSceneChatroomMode);

iOS

engine.setAudioProfile(AliRtcAudioProfile.engineHighQualityMode, audio_scene: AliRtcAudioScenario.sceneChatroomMode)
说明

建议客户端将远端音频首帧回调onFirstRemoteAudioDecoded作为通话接通的依据。

服务端AI服务编排

AI服务编排推送欢迎词的时机是在RTC Linux SDK的以下回调均收到后,开始向Linux SDK推送欢迎词音频:

  • Linux 端需要先推流成功,对应的回调是OnAudioPublishStateChanged,推流状态切换成AliEngineStatsPublished

    //以python版本为例
    def OnAudioPublishStateChanged(self, oldState: AliRTCEngine.AliEnginePublishState, newState: AliRTCEngine.AliEnginePublishState, elapseSinceLastState: int, channel: str) -> None:
  • subscribe流成功,对应的回调是:OnAudioSubscribeStateChanged,其订阅状态切换成AliEngineStatsSubscribed

    //以python版本为例
    def OnAudioSubscribeStateChanged(self, uid: str, oldState: AliRTCEngine.AliEngineSubscribeState, newState: AliRTCEngine.AliEngineSubscribeState, elapseSinceLastState: int, channel: str) -> None:
  • greetReady回调,回调远端用户是否已准备好接收欢迎词,isReadytrue后方可发送欢迎词。

    //以python版本为例
    def OnGreetReady(self, isReady:bool) -> None:

AI服务编排收到上面三个回调,并且其每个回调状态都已切换成就绪的状态后,此时服务编排向Linux SDK推送欢迎词语音,终端APP可听到完整的欢迎语。

能力扩展

音频3A

阿里云Linux SDK支持3A能力,包括:

  • ARTC SDK发送过来的数据做进一步的降噪,提高ASR识别率。

  • TTS/数字人返回的声音做增益,根据您设置的档位提高音量。

说明

降噪功能在ARTC SDKLinux SDK中均已实现。在Linux SDK上开启降噪,是基于以下两方面考虑:

  • Linux SDK上的降噪在算力开销上高于ARTC SDK,更适合在服务端部署。

  • H5场景上无法开启针对ASR的降噪优化。

以上3A能力默认是关闭的,音量增益可通过API显式设置,降噪能力需要提交工单联系我们打开。

H265

阿里云Linux SDK支持H.265编码功能。由于该功能在大多数客户中的需求并不高,阿里云官网版本并未包含H.265编码模块。如需H.265编码功能,请联系我们

API相关文档