【iOS开发】拓幻美颜对接进腾讯云直播过程以及问题

工作需要, 将腾讯云自带的美颜设置 替换为 拓幻美颜, 记录下遇到的一个问题。

拓幻美颜作为一个第三方美颜sdk, 功能比较多, 对接过程也很方便,直接开整:

  • 申请拓幻的appkey

TISDK的初始化是需要一个key来进行鉴权, 自己去申请。

  • 下载配置SDK

最新SDK下载地址:TiSDK_iOS

下载完成后,确认TiSDK_iOS 包含:TiSDK.frameworkTiLiveUI 文件夹(可选)、 TiSDKResource.bundle

将整个TiSDK_iOS文件夹导入自己的工程中, 如果工程中已经添加Masonry, SSZipArchive,将TiUITool 目录下的Masonry.frameworkZipArchive. framework 删除,避免冲突;

添加依赖库AssetsLibrary.frameworklibc++.tbd;

动态库TiSDK.framework 选择Embed 类型为:Embed & Sign

  • 初始化SDK

TiSDK 初始化函数程序中调用一次即可生效,建议在 Application 创建的时候调用; 如果渲染功能使用不频繁,也可以在使用的时候调用:

导入头文件:#import

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSString* key = kTuoHuanKey;
        [TiSDK init:key CallBack:^(InitStatus callBack) {
            if (callBack.code == 100) {
                  // 初始化成功,可自由处理一些需要的逻辑
            }
        }];
}
  • 对接TiLiveUI

导入头文件:#import "TiUIManager.h"

加载UI:

- (void)viewDidLoad {
    [super viewDidLoad];

    // 这里的`TiUIManagerDelegate`可自由设置, 如果需要另外处理点击事件, 就实现此delegate, 一般用于使用默认UI的时候
    [[TiUIManager shareManager] loadToWindowDelegate:nil];
}

在需要美颜设置的方法内调起美颜UI:

 [[TiUIManager shareManager] showMainMenuView];

到这里, 拓幻的美颜设置UI已经可以正常调起了, 那我设置了美颜之后要怎么把图像上传, 怎么把拓幻和腾讯云推流对接在一起呢?

腾讯云的直播推流TXLivePush支持自定义音视频采集和渲染, 那么我们可以把经过拓幻美颜的图像进行采集后二次处理,然后进行推流。

这里用到TXLivePushvideoProcessDelegate代理:

 // self.livePushLisher 是TXLivePush生成的对象
self.livePushLisher.videoProcessDelegate = self;   

实现代理:

-(GLuint)onPreProcessTexture:(GLuint)texture width:(CGFloat)width height:(CGFloat)height {

  // OpenGL线程回调中, 调用拓幻的纹理渲染,将渲染后的纹理传给TXLivePush进行推流
   return [[TiSDKManager shareManager] renderTexture2D:texture Width:width Height:height Rotation:CLOCKWISE_0 Mirror:self.livePushLisher.config.frontCamera];
}

在OpenGL线程中回调,在这里可以进行采集图像的二次处理
@param texture 纹理ID
@param width 纹理的宽度
@param height 纹理的高度
@return 返回给SDK的纹理
说明:SDK回调出来的纹理类型是GL_TEXTURE_2D,接口返回给SDK的纹理类型也必须是GL_TEXTURE_2D; 该回调在SDK美颜之后. 纹理格式为GL_RGBA

- (GLuint)onPreProcessTexture:(GLuint)texture width:(CGFloat)width height:(CGFloat)height;

到这里, 腾讯云直播对接拓幻, 就结束了。

但是在测试过程中, 发现了一个bug, 当app启动后, 第一次调起美颜UI界面时,背景容器图层为空, 界面显示不正常:

通过对拓幻的UI部分源码的解读, 发现在TiUIManager中有美颜模块的主要功能UI,也就是美颜UI的容器图层tiUIViewBoxView, 这个视图中有分类功能图层classifyView,里面有一个方法:-(void)Judge_pro:(NSString *)key, 这个方法主要处理功能图层上的UI显示, 所以直接调用一下这个方法, 在showMainMenuView之前提现把所有的子控件都加载设置一遍:

  [[TiUIManager shareManager].tiUIViewBoxView.classifyView Judge_pro:@""];
  [[TiUIManager shareManager] showMainMenuView];

之后再次运行, 就正常显示:

结束!

如果对你有用就给个吧~

你可能感兴趣的:(【iOS开发】拓幻美颜对接进腾讯云直播过程以及问题)