更新时间:2023-10-26 GMT+08:00
分享

原始视频数据(视频前后处理)

功能描述

音视频传输过程中,可以对采集到的音视频数据进行前处理和后处理,获取想要的播放效果。

对于有自行处理音视频数据需求的场景,HWRtcEngine SDK提供原始数据功能,您可以在将数据发送给编码器前进行前处理,对捕捉到的音频信号或视频帧进行修改,也可以在将数据发送给解码器后进行后处理,对接收到的音频信号或视频帧进行修改。

原始音频数据可以进行视频前处理,然后发送给远端。也可以进行视频后处理。

接口调用流程

注册视频前后处理

获取HWRtcEngie的HWRtcMediaEngie对象。

IHRTCMediaEngine * mediaEngine = m_pRtcEngine->getMediaEngine();

注册视频前后处理

mediaEngine->setVideoFrameObserver(&g_VideoObser);

每次入会都需要重新注册。取消注册,则传nil。

HRTCVideoFrameObserver g_VideoObser要继承IHRTCVideoFrameObserver

和实现

requireCaptureVideoFrame:
requireRenderVideoFrame:

回调,通过回调的返回值来决定对应视频帧的处理是否生效。

实现

onVideoFrameCapture:
onVideoFrameRender:

回调,从回调中获取视频帧并进行处理。

注意:所有回调的返回值为false,说明对视频帧的处理无效。

示例代码如下:

class HRTCVideoFrameObserver : public IHRTCVideoFrameObserver {
public:
    virtual bool onVideoFrameCapture(HRTCVideoFrame& videoFrame);
    virtual bool onVideoFrameRender(const char* userId, HRTCVideoFrame& videoFrame);
    virtual bool requireCaptureVideoFrame() override;
    virtual bool requireRenderVideoFrame()override;
};
//视频前处理
bool HRTCVideoFrameObserver::onVideoFrameCapture(HRTCVideoFrame& videoFrame) {
    return true;
}
//后处理
bool HRTCVideoFrameObserver::onVideoFrameRender(const char* userId, HRTCVideoFrame& videoFrame) {
    return true;
}
bool HRTCVideoFrameObserver::requireCaptureVideoFrame() {
    return true;
}
bool HRTCVideoFrameObserver::requireRenderVideoFrame() {
    return true;
}

加入房间

参考接口调用流程中加入房间的时序图步骤加入房间。

相关文档