构建智能手表场景

更新时间不可用

了解如何快速接入智能手表,完成环境准备、参数配置、示例运行和核心流程验证。

本文介绍如何基于声网 SDK 实现智能手表音视频对讲场景。

你需要在设备端采集音视频信号,编码并发送到客户端,同时接收并渲染客户端发送的音视频信号。

设备端构建

设备端包括以下两类:

  • 安装实时操作系统 (Real-time operating system, RTOS) 的设备。声网已支持展锐 T1X7、W217、W3X7、8910,如需使用其他芯片平台,联系 sales@shengwang.cn。
  • 安装 Android 操作系统的设备。

你可以根据自己的操作平台,参考以下步骤完成设备端构建。

对于实时操作系统 (RTOS),你需要实现以下功能:

采集并编码音视频信号 (实时操作系统 (RTOS))

你需要使用与设备适配的原生库实现音视频信号采集与编码。

将已编码的音视频信号发送到客户端 (实时操作系统 (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);

接收并渲染客户端发送的音视频信号 (实时操作系统 (RTOS))

你需要在设备端集成 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 设备端集成 RTC SDK,直接实现音视频采集、编码、传输、解码、渲染等功能。详见实现音视频互动。

客户端构建

客户端可以是 Android、iOS 等移动端设备或 macOS、Windows 等桌面端设备。

你需要在客户端集成 RTC SDK,直接实现音视频采集、编码、传输、解码、渲染等功能。详见实现音视频互动。

在传输指定格式的音视频数据时,RTSA Lite SDK 与 RTC SDK 可以实现互通。详见与 RTC SDK 互通音视频数据。