Android&iOS

最近更新时间:2024-05-16 17:42:52

我的收藏

背景说明

本章节将介绍使用 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;
}