背景说明
本章节将介绍使用 AllInOneRTCEngine 服务时怎样接入第三方美颜。在此之前,请确保您已完成:
已成功接入 AllInOneRTCEngine。
已成功导入第三方美颜 SDK。
接入第三方美颜的方法
关于 TRTC 的视频处理流程如下图所示,您只需在预处理阶段,通过第三方美颜 SDK 处理原始视频数据即可完成美颜接入。
原始视频数据的获取方法:
Android:通过调用 registerVideoFrameObserver(注册原始视频观测器对象), 并注册 TRTCVideoFrameListener 类中的 onProcessVideoFrame 回调获得。
registerVideoFrameObserver
注册原始视频观测器对象
public abstract int registerVideoFrameObserver(Object observer);
详情: | 设置该回调之后,SDK 会把采集到的视频帧通过您设置的 listener 回调出来,用于第三方美颜组件进行二次处理,之后 SDK 会将处理后的视频帧进行编码和发送。 |
参数: | observer 自定义预处理回调,当您使用 AllInOneRTCEngine 创建的实例为 TRTCCloud 类型时,该参数需要创建并传入 TRTCVideoFrameListener 类型的对象,而当您创建的实例为 RtcEngine 时,该参数需要创建并传入 IVideoFrameObserver 类型的对象。 |
| |
| |
| |
iOS:通过调用 setVideoFrameDelegate(注册原始视频观测器对象),并注册类 TRTCVideoFrameDelegate 类中的 onProcessVideoFrame 回调获得。
setVideoFrameDelegate
注册原始视频观测器对象
- (BOOL)setVideoFrameDelegate:(id _Nullable)delegate;
详情: | 设置该回调之后,SDK 会把采集到的视频帧通过您设置的 listener 回调出来,用于第三方美颜组件进行二次处理,之后 SDK 会将处理后的视频帧进行编码和发送。 |
参数: | delegate 接口对象实例,当您使用 AllInOneRTCEngine 创建的实例为 TRTCCloud 类型时,需要注册TRTCVideoFrameDelegate 类,您可以根据需要注册 TRTCVideoFrameDelegate 类中的回调。在成功注册视频观测器后,SDK 会在捕捉到每个视频帧时,触发您所注册的上述回调。而当您创建的实例为 RtcEngine 时,则需要注册 AgoraVideoFrameDelegate 类的回调。 |
| |
| |
| |
接入第三方美颜示例
相芯美颜(Android)
当您使用 AllInOneRTCEngine 服务创建的实例为 TRTCCloud 类型时:
导入包名 import com.tencent.trtc.TRTCCloudListener,创建一个 TRTCVideoFrameListener 类型的对象,并实现在 onProcessVideoFrame 回调中使用第三方美颜 SDK 处理原始视频数据(重要)。
// 导入import com.tencent.trtc.TRTCCloudListener;// 创建一个 TRTCVideoFrameListener 类型的对象TRTCCloudListener.TRTCVideoFrameListener mListener = new TRTCCloudListener.TRTCVideoFrameListener() { @Override public void onGLContextCreated() {// SDK 内部 OpenGL 环境已经创建的通知 mFURenderer.onSurfaceCreated(); } @Override public int onProcessVideoFrame(TRTCCloudDef.TRTCVideoFrame srcFrame,TRTCCloudDef.TRTCVideoFrame dstFrame) {// mFURenderer 为相芯美颜SDK的实例 dstFrame.texture.textureId = mFURenderer.onDrawFrameSingleInput(srcFrame.texture.textureId, srcFrame.width, srcFrame.height); return 0; } @Override public void onGLContextDestory() {// SDK 内部 OpenGL 环境被销毁的通知 mFURenderer.onSurfaceDestroyed(); } }
在进房前调用 registerVideoFrameObserver 注册原始视频观测器对象,成功接入第三方美颜。
private AIORTCEngine mEngine;// 创建 AIORTCEngine 实例,并切换 SDK 为 TRTCCloud。mEngine = RTCEngineManager.create(this, appId, mTRTCListener, true);// 调用 registerVideoFrameObserver 注册原始视频观测器对象,并传入上一步已创建的 TRTCVideoFrameListener 类型对象mEngine.registerVideoFrameObserver(mListener);
相芯美颜(iOS)
当您使用 AllInOneRTCEngine 服务创建的实例为 TRTCCloud 类型时:
在进房前调用 setVideoFrameDelegate:
#import <TXLiteAVSDK_TRTC/TRTCCloudDelegate.h>@interface TRTCMainViewController : TRTCVideoFrameDelegate@property (nonatomic, strong) id<AIORTCEngine> engine;......@end- (void)enableThirdBeauty {// 初始化相芯美颜SDK[self initThirdBeauty];// 调用 setVideoFrameDelegate 成功接入第三方美颜[_engine setVideoFrameDelegate:self];}
注册 TRTCVideoFrameDelegate 类的 onProcessVideoFrame回调,在该回调中,使用第三方美颜SDK处理原始视频数据(重要),成功接入第三方美颜。
@implementation TRTCMainViewController- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame *)srcFrame dstFrame:(TRTCVideoFrame *)dstFrame{// FUManager 为相芯美颜SDK实例dstFrame.textureId = [[FUManager shareManager] renderItemWithTexture:srcFrame.textureId Width:srcFrame.width Height:srcFrame.height];return 0;}