IM 即时通讯 (438)
Android (207)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (15)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (33)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (166)
- SDK 导入 (8)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (25)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (3)
- 音视频 (4)
- 其他 (23)
Web (36)
Server (29)
如何自己实现视频聊天中的美颜功能?(声网)
回答:
请下载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)的时候注册。