WebRtc中VoiceEngine的使用方法
webrtc中的VoiceEngine是用來管理語音通道channel的類
提供了控制語音整個過程的接口
VoiceEngine的實現類VoiceEngineImpl通過繼承的方式將很多不同類型的接口集成在了一個類對象中。
這些接口一共分為以下幾種類型:
- VoiceEngine :基礎接口,可以設置log文件路徑,創建VoiceEngineImpl對象
- VoEAudioProcessingImpl :提供了語音信號處理的功能,如噪聲抑制Noise Suppression)、自動增益控制AGC、回聲消除EC等功能
- VoECodecImpl :提供了編解碼設置、FEC保護、碼率設置等功能
- VoEExternalMediaImpl :實現對語音數據預處理的回調函數設置
- VoEFileImpl :提供了對語音數據錄音、播放語音文件作為語音輸入的功能
- VoEHardwareImpl :提供了對語音設備管理的功能
- VoENetEqStatsImpl :提供了獲取語音neteq模塊工作狀態信息的功能
- VoENetworkImpl :提供了語音數據的接收和發送的功能
- VoERTP_RTCPImpl :提供了rtp/rtcp協議控制的接口,如設置本地ssrc、nack狀態、獲取rtp/rtcp統計信息等功能
- VoEVideoSyncImpl :提供了音視頻同步播放的功能
- VoEVolumeControlImpl :提供了對采集和播放聲音的控制功能
- VoEBaseImpl :提供了channel創建,接收發送的開關、播放開關等功能
以上所有基類提供的接口最終的實現其實都是基于Channel這個類
Channel類提供了以上所有基類的接口的具體實現,所以Channel類非常復雜,代碼量也很大
其他類只是通過一個channelId找到要操作的channel對象,然后調用channel的接口來實現
基本的調用流程都是如下形式:
voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetRTCPStatus() failed to locate channel");
return -1;
}
channelPtr->SetRTCPStatus(enable);
所以在理解voiceEngine時,一定要理解channel的概念,channel可以用來發送本地數據,也可以用來接收遠端數據
其實在前一篇博客中提到的AudioSendStream AudioReceiveStream也是變相的操作著channel
創建VoiceEngine
創建VoiceEngine非常簡單
VoiceEngine* voe = VoiceEngine::Create();
獲取各種接口
VoECodec* codec = VoECodec::GetInterface(VOE.ENGINE);
VoEBase* base = VoEBase::GetInterface(VOE.ENGINE);
VoEVolumeControl* volumeControl = VoEVolumeControl::GetInterface(VOE.ENGINE);
VoEHardware* hardware = VoEHardware::GetInterface(VOE.ENGINE);
VoERTP_RTCP* rtpRtcp = VoERTP_RTCP::GetInterface(VOE.ENGINE);
VoEAudioProcessing* audioProcessing = VoEAudioProcessing::GetInterface(VOE.ENGINE);
VoEExternalMedia* externalMedia = VoEExternalMedia::GetInterface(VOE.ENGINE);
共享資源SharedData
SharedData提供了在使用webrtc語音引擎時,只需要創建一次的資源,主要有以下幾種:
- 管理channel對象的ChannelManager
- 管理音頻硬件設備的AudioDeviceModule,比如設置音量控制,選取采集設備
- 對采集數據的預處理TransmitMixer,比如可以對采集的數據錄音
- 對接收數據播放前的處理OutputMixer,比如可以對接收的數據錄音
- 定時任務處理的線程ProcessThread
關鍵詞:webrtc voice engine api 語音引擎