如何自己实现视频聊天中的美颜功能?(声网)

如何自己实现视频聊天中的美颜功能?(声网)
发布时间: 2017-09-25 12:03

回答:

请下载CallKit源码,参考 RCCall.mm 中 sharedRCCall 方法里被注释的两行。


agoraRegisterVideoFrameObserver(RCDVideoFrameObserver::sharedObserver(), true, true);

agoraRegisterAudioFrameObserver(RCDAudioFrameObserver::sharedObserver());


其中第一行 agoraRegisterVideoFrameObserver 是注册视频Frame观察者。

请注意方法的后两个bool类型参数。

第一个是是否自己采集视频数据,如果使用系统摄像头采集的视频,并在这个基础上进行视频处理,请置为false

第二个参数是是否对本地预览画面进行视频处理。


注册完observer之后,可以在注册的observer中对视频的YUV数据进行处理。您可以参考示例中的RCDVideoFrameObserver。

在 RCDVideoFrameObserver::onCaptureVideoFrame(agora::media::IVideoFrameObserver::VideoFrame& videoFrame) 的回调方法中,系统摄像头采集的 videoFrame 会被回调上来,您可以对回调上来的 YUV 格式视频数据直接进行美颜处理,处理完成之后 return true,您处理过的视频数据就会生效。修改之前请确保您知道自己在做什么,不推荐初学者使用!!


另外需要注意的一点,源码中 RCCall 中是在 sharedRCCall 方法中注册的 observer。实际使用的时候在这里注册不会生效,请在发起视频通话(startSingleCall/startMultiCall)和接收通话(didReceiveCall)的时候注册。