扣子编程 Realtime 嵌入式 SDK 集成火山引擎 RTC 技术,专为智能穿戴设备、网络摄像头、智能门铃、AI 玩具等各类 IoT 设备量身定制,旨在助力开发者快速搭建稳定可靠的实时音视频通话功能。你只需通过简洁易用的 API 接口,即可轻松使用低代码智能体,无缝实现适配不同硬件设备的 AI 实时通话服务,降低了开发门槛与成本。
当前硬件设备正以前所未有的速度智能化升级,成为人工智能领域成长最快的赛道之一。AI 与硬件的结合正逐渐渗透到我们生活的方方面面,如陪伴类玩具、智能家居、教育硬件以及智能穿戴设备等。
开始集成 SDK 前,请确保已完成如下操作:
|
操作 |
说明 |
|---|---|
|
发布智能体 |
已成功搭建并发布智能体为 API 服务。搭建步骤可参考搭建可视化智能体或搭建低延时语音助手,发布步骤请参见发布为 API 服务。 说明 若需使用视频理解能力,请为智能体配置一个视觉模型,例如豆包视觉理解模型。 |
|
获取访问密钥 |
获取访问密钥,用于身份认证与鉴权。
说明 扣子编程 SDK 封装了多种鉴权方式,能够有效简化鉴权流程,你可以参考鉴权示例代码实现不同方式的 OAuth 认证,以获取和管理访问扣子编程 API 所需的令牌。 |
|
开发环境 |
支持乐鑫 ESP32S3、全志 XR872、移远 ASR1606 等主流芯片平台及 Linux 系统,特殊 Linux 平台需提供交叉编译工具链。 |
调用创建房间接口创建扣子房间,并设置智能体的音色。
创建房间时可以通过 voice_id 参数指定智能体使用的音色,扣子编程提供一系列系统音色,如果没有合适的系统音色,你也可以调用复刻音色API,复刻指定音频文件中的人声音色。此外,你还可以设置房间内的音频编码格式,提高音频通话质量。
curl --location --request POST 'https://api.coze.cn/v1/audio/rooms' \
--header 'Authorization: Bearer pat_OYDacMzM3WyOWV3Dtj2bHRMymzxP****' \
--header 'Content-Type: application/json' \
--data-raw '{
"bot_id": "734829333445931****"
}'
{
"detail": {
"logid": "202410291302044CD1CC3B4AE0897***"
},
"data": {
"room_id": "room_id_743105798342****3", // 房间 id
"app_id": "6705332c79516e01****", // app_id
"token": "0016705********cANTE1MjkFAAAAAAAAAAEAAAAAAAIAAAAAAAMAAAAAAAQAAAAAACAA58QEAvxdy3LHNzSwq6apM9PUKM2rOsxIg/VB4b1xEFA=",
"uid": "uid_743105798*****29"
},
"code": 0,
"msg": ""
}
说明
你还可以通过代码转换智能体,将 curl 命令转换成其他编程语言的代码,例如 JavaScript、 Go、 Java 等。
智能体加入房间。
成功创建房间后,智能体会自动加入房间。
说明
你需要自行实现音视频信号的采集,扣子编程支持的音视频编码格式如下表所示。
|
类别 |
编码格式 |
说明 |
|---|---|---|
|
音频 |
OPUS、 G711A、 AACLC、 G722 |
默认为 OPUS |
|
视频 |
H.264、ByteVC1 |
默认为 H.264 |
说明
创建房间时设置的音视频编码格式,需要和采集的音视频编码格式保持一致。
嵌入式硬件客户端调用 Realtime 嵌入式 SDK 加入房间。
byte_rtc_create 创建引擎。byte_rtc_init初始化引擎实例。byte_rtc_set_audio_codec 设置音频编码格式。byte_rtc_set_video_codec 设置视频编码格式。byte_rtc_join_room 加入房间。说明
客户端加入房间时需要指定 room_id、uid、app_id 和 token ,这些参数的值可以从步骤一:创建房间接口的返回参数中获取。
on_join_room_success 回调,告知客户端加入房间成功。byte_rtc_send_audio_data 或 byte_rtc_send_video_data将采集到的音频和视频信息传给智能体,智能体收到音视频后会进行语音 + 文本回复。说明
默认 20ms 发送一次编码后的音频数据,硬件设备自动订阅对话消息。
byte_rtc_rts_send_message 给 SDK 发送Realtime 上行事件,在上行信令中支持如下操作:
说明
给智能体发送上行事件时需要指定智能体的 ID。
on_message_received 接收 SDK 返回的Realtime 下行事件,在下行信令中你可以根据需要执行相关操作,例如:
byte_rtc_leave_room 接口退出房间。byte_rtc_destory 接口销毁引擎实例。系统默认采用柔美女友音色,音色 ID 为 7426720361733046281,你可以修改音色,操作如下:
说明
扣子编程提供一系列系统预制音色,如果没有合适的系统音色,你也可以调用 复刻音色API,复刻指定音频文件中的人声音色。
voice_id 参数指定智能体使用的音色。你可以在用户完成语音输入后播放提示音,向用户反馈语音指令已被系统成功接收、系统即将进入下一步操作,从而提升用户体验并增强交互的流畅性。实现方案如下:
系统默认开启语音打断功能,如果希望禁止语音输入打断智能体的播放,可以在更新房间配置的上行信令中,将 allow_voice_interrupt 设置为 false,禁止语音打断功能。
参考手动提交对话内容的上行信令,提交事件后就会生成语音回复。
|
功能 |
函数名 |
说明 |
|---|---|---|
|
加房 |
|
用户进入房间。 |
|
发送信令 |
|
给服务端发送Realtime 上行事件,例如更新房间配置以及手动提交对话内容等。 |
|
接收信令 |
|
接收服务端发送的Realtime 下行事件。例如用户开始说话事件,用户结束事件,以及对话文本内容等。 |
|
发送音频 |
|
推送音频到智能体,智能体收到音频后会进行语音 + 文本回复。 |
|
发送视频 |
|
推送视频给到智能体,智能体理解视频内容后会进行语音 + 文本回复。 |
音视频通话卡顿或延迟时,你可以参考如下步骤进行排查:
INFO,在日志中搜索关键字 used too many times。VolcEngineRTCLite 的回调中存在大量长耗时操作。日志中时间的单位为毫秒。byte_rtc_engine_t 实例采用单线程结构,若应用层操作耗时过多,可能会对 VolcEngineRTCLite 的正常逻辑产生影响。在正常情况下,不应出现此类日志输出。INFO,在日志中搜索关键字 fps。INFO,在日志中搜索关键字 lite - cc bw。on_key_frame_gen_req,你需要及时进行处理,并迅速编出 I 帧。I 帧作为视频中的关键帧,对于首帧的快速显示起着至关重要的作用,及时编出 I 帧可以有效提升首帧加载速度。当拉流端遇到无法接收到音频流的情况时,你可以按照以下步骤进行排查和处理:
byte_rtc_set_audio_codec 接口设置音频编码格式。只有当收发两端的音频格式保持一致时,拉流端才能正确接收和解码音频流。当拉流端遇到无法接收到视频流的情况时,你可以按照以下步骤进行排查和处理:
byte_rtc_send_video_data 接口设置视频编码格式。只有当收发两端的视频格式保持一致时,拉流端才能正确接收和解码视频流。当遇到音频延迟较大的问题时,请确认设备端发送的音频格式及采样率是否与下表中的默认值一致:
|
音频格式 |
默认采样率 |
每帧采样点数 |
|---|---|---|
|
OPUS |
48,000 |
960 |
|
AACLC |
48,000 |
1024 |
|
G722 |
8,000 |
160 |
|
G711A |
8,000 |
160 |
用户调用 byte_rtc_join_room 接口加入房间后未触发回调的排查思路如下:
ping 或 dig)来检查域名解析是否正常。具体操作方法如下:
ping 命令:在命令行中输入 ping <目标域名>,例如 ping example.com,查看网络是否能够正常响应。若出现请求超时或无法解析等提示信息,则表明域名解析可能存在问题。dig 命令:在命令行中输入 dig <目标域名>,例如 dig example.com,该命令会返回详细的域名解析信息,你可以根据返回结果判断域名解析是否正常。默认情况下,用户在静音状态持续 3 分钟后,智能体将自动退出房间。若需调整该时间设置,你可以在更新房间配置上行事件中,修改 data.longest_silence_ms 参数的值。