语音对讲

最近更新时间:2025-09-10 17:58:11

我的收藏
说明:
语音对讲,用于远端设备和现场设备进行语音交互。 语音传输会随操控会话建立自动建立。SDK 默认只打开了上行音频。如需使用双向音频,请准备相关音频硬件。增加相关配置并重启 SDK。

硬件设备准备

设备端
上行音频 : 现场设备->远端设备
下行音频: 远端设备->现场设备
现场设备
麦克风
扬声器
远端设备
扬声器
麦克风

音频配置修改

参考 现场设备配置说明远端设备配置说明 ,修改启动 JSON 配置,开启音频开关并设置音频设备。

开启音频开关(全平台)

开启音频接收,将 audio_receive 配置为1; 开启音频采集,将audio_enable 配置为1。
设备端
上行音频 : 现场设备 -> 远端设备
下行音频: 远端设备 -> 现场设备
现场设备
"audio_enable":1
"audio_receive":1
远端设备
"audio_receive":1
"audio_enable":1

设置音频设备(Linux 系统)

SDK 默认使用系统默认的音频播放和采集设备,Linux 平台下如果目标音频设备不是系统默认设备,可通过配置指定使用对应的音频设备。
配置项
配置说明
配置举例
音频播放设备
audio_play":"hw:#Card,#Device,#SubDevice
其中 #Card , #Device , #SubDevice 为声卡设备编号,Linux 平台可通过 aplay -l 查询目标设备的 card、device、subdevice 的编号。
例如,目标设备是 Card 0, Device 0, SubDevice #0:
audio_play":"hw:0,0,0
音频采集设备
audio_record":"hw:#Card,#Device,#SubDevice
其中 #Card , #Device , #SubDevice 为声卡设备编号,Linux 平台可通过 arecord -l 查询目标设备的 card、device、subdevice 的编号
例如,目标设备是 Card 0, Device 0, SubDevice #0:
audio_record":"hw:0,0,0
示例:执行命令 "aplay -l ", 可以查看音频播放设备。



如图使用的播放设备为"card 0, device 3, subdevice 0", 则在配置文件 config.json 中增加配置节点"audio_play":"hw:0,3,0"。

通过 SDK 接口管理音频

动态选择音频设备(Linux 系统)

可使用 C/C++ 现场设备 SDK API 中音频控制类 API 接口来设置当前音频设备.
1. TRRO_getDeviceCount 获取目标类型的音频设备列表。
2. TRRO_getDeviceName 获取设备名称, 并通过名称过滤, 找到目标名称的音频设备编号。
3. TRRO_setCurrentDevice 将对应设备编号的音频设备设置为当前使用的音频设备。
函数列表
描述
获取音频采集/播放设备数量
获取音频采集/播放设备名称
更改当前音频采集/播放设备

应用输入音频数据 (全平台)

当应用需要自行音频采集时,可使用外部输入 PCM 音频数据接口,输入音频数据。
需打开音频配置 "audio_enable":1 以及外部音频输入配置"audio_external":1。
每次音频数据输入长度对应10ms音频数据。
输入音频 PCM 数据格式须为 16bit 采样小端对齐,即 s16le 格式。
输入音频采样率支持 8k/16k/24k/32k/44.1k/48k 等,48k 采样对应输入为48000。
/**
* @name TRRO_externAudioData
* @brief 外部音频数据输入(pcm数据), 16位音频采样
* @param[in] data 源数据
* @param[in] data_size 数据大小
* @param[in] channel 音频声道数
* @param[in] sample_rate 音频采样率
* @return 1 for success, other failed
*/
extern "C" TRRO_EXPORT int TRRO_externAudioData(const char* data, int data_size, int channel, int sample_rate);

应用播放音频数据(全平台)

当应用需要自行音频播放时,可使用 PCM 音频数据接口回调,获取 SDK 混流后的音频数据。使用 PCM 音频数据回调时,SDK 内部音频播放会关闭。
1. 需打开音频配置 "audio_receive":1 以及外部音频播放配置"audio_play":“outside”。
2. 每次音频数据回调长度对应10ms音频数据。
3. 输出音频 PCM 数据为 16bit 采样小端对齐,即 s16le 格式。
4. 输出音频采样率为 48kHz。
/**
* @name TRRO_onRemoteMixAuidoFrame
* @brief 对端多路混音后音频原始数据回调
* @param[in] context 回调上下文指针, 返回注册回调函数时传入的context
* @param[in] data 音频PCM数据 10ms 16bits,小端对齐
* @param[in] length 数据长度
* @param[in] channel 音频声道数目,如单声道为1,双声道为2,多声道为N
* @param[in] sample_rate 音频采样率
* @return : void
*/

typedef void TRRO_onRemoteMixAuidoFrame(void* context, const char* data, int length, int channel, int sample_rate);

/**
* @name TRRO_registerRemoteMixAuidoFrameCallback
* @brief 注册远端混音音频数据回调函数
* @param[in] context 上下文
* @param[in] callback 回调函数
* @return 1 for success, other failed
*/
extern "C" TRRO_EXPORT int TRRO_registerRemoteMixAuidoFrameCallback(void* context, TRRO_onRemoteMixAuidoFrame * callback);