2024/05/27 11:27:07
构建智能手表场景
本文介绍如何基于声网 SDK 实现智能手表音视频对讲的场景。你需要在设备端采集音视频信号,编码并发送到客户端,同时接收并渲染客户端发送的音视频信号。
设备端构建
设备端包括以下两类:
- 安装实时操作系统 (Real-time operating system, RTOS) 的设备。声网已支持展锐 T1X7、W217、W3X7、8910,如需使用其他芯片平台,联系 sales@shengwang.cn。
- 安装 Android 操作系统的设备。
你可以根据自己的操作平台,参考以下步骤完成设备端构建。
- 实时操作系统 (RTOS)
- Android 操作系统
对于实时操作系统 (RTOS),你需要实现以下功能:
采集并编码音视频信号
你需要使用与设备适配的原生库实现音视频信号采集与编码。
将已编码的音视频信号发送到客户端
你需要在设备端集成 RTSA Lite SDK,将音视频帧发送到客户端。
设备端调用 RTSA Lite SDK 中的 agora_rtc_join_channel
加入 RTC 频道。收到 on_join_channel_success
回调后,就可以开始发送音视频数据。下面的示例代码展示了设备端 RTSA Lite SDK 的调用逻辑。设备端与客户端必须使用同一个声网 App ID 且加入同一个 RTC 频道才能互通。
C
// 示例代码基于 1.8.0 版本的 RTSA Lite SDK
// 加入 RTC 频道,需要使用业务后台下发的参数
rval = agora_rtc_join_channel(g_conn_id, CHANNEL_NAME, CALLEE_UID, TOKEN, &channel_options);
if (rval < 0) {
printf("Failed to join channel \"%s\", reason: %s\n", CHANNEL_NAME, agora_rtc_err_2_str(rval));
return -1;
}
// 收到 on_join_channel_success 回调后,启动音视频发送线程
static bool g_connected_flag = false;
static void __on_join_channel_success(connection_id_t conn_id, uint32_t uid, int elapsed) {
g_connected_flag = true;
agora_rtc_get_connection_info(conn_id, &g_conn_info);
printf("[conn-%u] Join the channel %s successfully, uid %u elapsed %d ms\n", conn_id, g_conn_info.channel_name, uid, elapsed);
}
while (!g_connected_flag) {
usleep(100 * 1000);
}
pthread_t video_thread_id;
pthread_t audio_thread_id;
rval = pthread_create(&video_thread_id, NULL, video_send_thread, 0);
if (rval < 0) {
printf("Unable to create video push thread\n");
return -1;
}
rval = pthread_create(&audio_thread_id, NULL, audio_send_thread, 0);
if (rval < 0) {
printf("Unable to create audio push thread\n");
return -1;
}
pthread_join(video_thread_id, NULL);
pthread_join(audio_thread_id, NULL);
接收并渲染客户端发送的音视频信号
你需要在设备端集成 RTSA Lite SDK,接收客户端发送的音视频帧。
- 监听
on_audio_data
回调接收所有你已加入的频道内的音频数据流。 - 监听
on_video_data
回调接收所有你已加入的频道内的视频数据流。
C
static void __on_audio_data(connection_id_t conn_id, const uint32_t uid, uint16_t sent_ts, const void *data, size_t len, const audio_frame_info_t *info_ptr) {}
static void __on_video_data(connection_id_t conn_id, const uint32_t uid, uint16_t sent_ts, const void *data, size_t len, const video_frame_info_t *info_ptr) {}
接收到音视频帧后,你需要使用与设备适配的原生库实现音视频帧的渲染。
客户端构建
客户端可以是 Android、iOS 等移动端设备或 macOS、Windows 等桌面端设备。
你需要在客户端集成 RTC SDK,直接实现音视频采集、编码、传输、解码、渲染等功能。详见实现音视频互动。
在传输指定格式的音视频数据时,RTSA Lite SDK 与 RTC SDK 可以实现互通。详见与 RTC SDK 互通音视频数据。