原始音频数据(音频前后处理)
功能描述
音视频传输过程中,我们可以对采集到的音视频数据进行前处理和后处理,获取想要的播放效果。
对于有自行处理音视频数据需求的场景,HWRtcEngine SDK 提供原始数据功能,您可以在将数据发送给编码器前进行前处理,对捕捉到的音频信号或视频帧进行修改,也可以在将数据发送给解码器后进行后处理,对接收到的音频信号或视频帧进行修改。
原始音频数据可以进行音频前处理,然后发送给远端。也可以进行音频后处理。
注册音频前后处理
获取HWRtcEngie的HWRtcMediaEngie对象。
IHRTCMediaEngine * mediaEngine = m_pRtcEngine->getMediaEngine();
注册音频前后处理
mediaEngine->setAudioFrameObserver(&g_AudioObser);
每次入会都需要重新注册。取消注册,则传nil。
HRTCAudioFrameObserver g_AudioObser要继承IHRTCAudioFrameObserver。
和实现
requireRecordAudioFrame:
requirePlaybackAudioFrame:
requireMixedAudioFrame:
回调,通过回调的返回值来决定对应音频帧的处理是否生效。
实现
onAudioFramePlayback:
onAudioFrameMixed:
onAudioFrameRecord:
回调,从回调中获取音频帧并进行处理。
注意:所有回调的返回值为false,说明对音频帧的处理无效。
示例代码如下:
class HRTCAudioFrameObserver : public IHRTCAudioFrameObserver { public: HRTCAudioFrameObserver() { RTCReadPcmFile(); } virtual bool onAudioFramePlayback(HRTCAudioFrame& auidoFrame); virtual bool onAudioFrameMixed(HRTCAudioFrame& audioFrame); virtual bool onAudioFrameRecord(HRTCAudioFrame& audioFrame); virtual bool requireRecordAudioFrame() override; virtual bool requirePlaybackAudioFrame() override; virtual bool requireMixedAudioFrame() override; }; /// 音频前后处理 bool HRTCAudioFrameObserver::onAudioFramePlayback(HRTCAudioFrame& audioFrame) { //远端音频数据 return true; } bool HRTCAudioFrameObserver::onAudioFrameMixed(HRTCAudioFrame & audioFrame) { //混音数据 return true; } bool HRTCAudioFrameObserver::onAudioFrameRecord(HRTCAudioFrame& audioFrame) { //本地音频数据 return true; } bool HRTCAudioFrameObserver::requireRecordAudioFrame() { return true; } bool HRTCAudioFrameObserver::requirePlaybackAudioFrame() { return true; } bool HRTCAudioFrameObserver::requireMixedAudioFrame() { return true; } HRTCAudioFrameObserver g_AudioObser; IHRTCMediaEngine * mediaEngine = m_pRtcEngine->getMediaEngine(); mediaEngine->setAudioFrameObserver(&g_AudioObser);
加入房间
参考接口调用流程中加入房间的时序图步骤加入房间。