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

你可能感兴趣的:(webrtc封装sdk(三)VoiceEngine的使用方法)