本文介绍在PC应用端实现语音对讲功能的操作步骤。
本文中的代码仅为示例,具体代码请在PC SDK中查看。
前提条件
已创建产品和设备,具体操作,请参见设备接入。
已获取PC应用端SDK,具体操作,请参见获取SDK及Demo。
操作步骤
创建语音对讲实例,并设置音频参数。
// 创建并设置对讲 LVMediaAudioHeader audioHeader; audioHeader.audioSamplesPerSec = 8000; audioHeader.audioChannel = 1; audioHeader.audioBitPerSample = 16; audioHeader.audioEncType = LV_MEDIA_AUDIO_ENC_G711A; pLVLiveIntercom_ = createLVLiveIntercom(audioHeader); pLVLiveIntercom_->setLiveIntercomCallback(this, nullptr);
注册监听器,并处理语音对讲回调。
请在对应的事件回调中处理,包括对讲开始、录音开始和结束、音量回调(用于UI展示)。在语音通道建立和对讲过程中,可能发生的错误,请参见错误列表。
void LiveIntercomWindow::onError(const LVLiveIntercomError &error, void *pUserData) { emit appendLog(QString::asprintf("liveintercom error: code=%d subCode=%d message=%s", error.code, error.subCode, error.message.c_str())); } void LiveIntercomWindow::onTalkReady(void *pUserData) { emit appendLog("对端已就绪,可以开始说话了"); } void LiveIntercomWindow::onRecorderStart(void *pUserData) { emit appendLog("录音机开始"); } void LiveIntercomWindow::onRecorderEnd(void *pUserData) { emit appendLog("录音机结束"); }
设置声音采集的增益值。
可以设置App端声音采集的增益值,提供如下水平供选择(默认值为无),请根据设备效果来调整。
-1:None。
0:Mild。
1:Medium。
2:high。
3:Aggressive。
4:very Aggressive。
5:Max。
pLVLiveIntercom_->setGainLevel(-1);
设置对讲模式。
提供如下五种对讲模式。
对讲模式
说明
注意事项
单向对讲
App端采集并发送音频数据到设备端进行播放。
App端采集音频期间手机保持声音静默。
全双工对讲(独立)
App端和设备端都需要同时做采音和放音。
设备端必须支持AEC(Acoustic Echo Cancellation),否则不建议使用该方案将会使用设备对讲通道的声音进行播放,可以单独存在不依赖直播通道。
全双工对讲(伴随直播)
App端和设备端都需要同时做采音和放音。
设备端必须支持AEC(Acoustic Echo Cancellation),否则不建议使用该方案将会使用设备直播通道的声音进行播放,要求必须有已开播的直播通道,可通过
LVLivePlayer.audioFocus()
方法在对讲开启前选择对应的已存在的直播通道。半双工对讲(独立)
App端和设备端都需要做采音和放音。
一端上始终不会出现同时采音和放音的情况,因此设备不要求支持AEC(Acoustic Echo Cancellation)。使用上类似对讲机,由App端在一次对讲会话中可多次人为控制录音的开启和结束,将会使用设备对讲通道的声音进行播放,可以单独存在不依赖直播通道。
说明该模式需要设备端SDK使用v2.3.3及以上版本的支持,如果使用较旧的设备SDK,将会降级到全双工对讲。
半双工对讲(伴随直播)
App端和设备端都需要做采音和放音。
一端上始终不会出现同时采音和放音的情况,因此设备不要求支持AEC(Acoustic Echo Cancellation)。使用上类似对讲机,由App端在一次对讲会话中可多次人为控制录音的开启和结束,将会使用设备直播通道的声音进行播放,要求必须有已开播的直播通道,可通过
LVLivePlayer.audioFocus()
方法在对讲开启前选择对应的已存在的直播通道。说明该模式需要设备端SDK使用v2.3.3及以上版本的支持,如果使用较旧的设备SDK,将会降级到全双工对讲。
// 设置使用独立双讲 pLVLiveIntercom_->setLiveIntercomMode(LV_LIVE_INTERCOM_MODE_DOUBLE_TALK);
开始对讲。
调用QueryVoiceIntercom接口获取IPC设备的语音对讲地址及解密密钥,并在开始对讲时设置。
对讲开始后,会启动回声消除,若已连接蓝牙耳机或者线控耳机则路由到耳机上。
// 开始对讲 pLVLiveIntercom_->start("rtmp://xx.xx.xx.xx/talk/xxx", decryptIvBase64String, decryptKeyBase64String);
切换对讲机讲话状态。开启半双工对讲后,您可主动切换对讲状态,按需收放音。
说明仅半双工对讲需要关注。
// 该状态下App端停止播放,采集音频发给设备端,同时设备端会停止音频采集,播放App端采集的声音 pLVLiveIntercom_->listen(true); ... // 该状态下App端恢复播放,同时设备端会停止播放声音,恢复音频采集 pLVLiveIntercom_->listen(false);
结束对讲,停止录音。
// 停止对讲 pLVLiveIntercom_->stop();
释放对讲资源。
不再使用对讲实例时,销毁对讲实例。
// 停止对讲 destroyLVLiveIntercom(&pLVLiveIntercom_);