webrtc封裝sdk(三)VoiceEngine的使用方法

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 語音引擎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章