工作需要, 將騰訊云自帶的美顏設(shè)置 替換為 拓幻美顏薇缅, 記錄下遇到的一個(gè)問題。
拓幻美顏?zhàn)鳛橐粋€(gè)第三方美顏sdk晌端, 功能比較多捅暴, 對接過程也很方便,直接開整:
-
申請拓幻的appkey
TISDK的初始化是需要一個(gè)key來進(jìn)行鑒權(quán)咧纠, 自己去申請蓬痒。
-
下載配置SDK
最新SDK下載地址:TiSDK_iOS
下載完成后,確認(rèn)TiSDK_iOS 包含:TiSDK.framework
漆羔、TiLiveUI 文件夾
(可選)梧奢、 TiSDKResource.bundle
將整個(gè)TiSDK_iOS
文件夾導(dǎo)入自己的工程中, 如果工程中已經(jīng)添加Masonry
, SSZipArchive
演痒,將TiUITool
目錄下的Masonry.framework
亲轨、ZipArchive. framework
刪除,避免沖突;
添加依賴庫AssetsLibrary.framework
鸟顺、libc++.tbd
;
動(dòng)態(tài)庫TiSDK.framework
選擇Embed 類型為:Embed & Sign
-
初始化SDK
TiSDK 初始化函數(shù)程序中調(diào)用一次即可生效惦蚊,建議在 Application 創(chuàng)建的時(shí)候調(diào)用; 如果渲染功能使用不頻繁器虾,也可以在使用的時(shí)候調(diào)用:
導(dǎo)入頭文件:#import <TiSDK/TiSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString* key = kTuoHuanKey;
[TiSDK init:key CallBack:^(InitStatus callBack) {
if (callBack.code == 100) {
// 初始化成功,可自由處理一些需要的邏輯
}
}];
}
-
對接TiLiveUI
導(dǎo)入頭文件:#import "TiUIManager.h"
加載UI:
- (void)viewDidLoad {
[super viewDidLoad];
// 這里的`TiUIManagerDelegate`可自由設(shè)置蹦锋, 如果需要另外處理點(diǎn)擊事件兆沙, 就實(shí)現(xiàn)此delegate, 一般用于使用默認(rèn)UI的時(shí)候
[[TiUIManager shareManager] loadToWindowDelegate:nil];
}
在需要美顏設(shè)置的方法內(nèi)調(diào)起美顏UI:
[[TiUIManager shareManager] showMainMenuView];
到這里, 拓幻的美顏設(shè)置UI已經(jīng)可以正常調(diào)起了莉掂, 那我設(shè)置了美顏之后要怎么把圖像上傳葛圃, 怎么把拓幻和騰訊云推流對接在一起呢?
騰訊云的直播推流TXLivePush
支持自定義音視頻采集和渲染憎妙, 那么我們可以把經(jīng)過拓幻美顏的圖像進(jìn)行采集后二次處理库正,然后進(jìn)行推流。
這里用到TXLivePush
的videoProcessDelegate
代理:
// self.livePushLisher 是TXLivePush生成的對象
self.livePushLisher.videoProcessDelegate = self;
實(shí)現(xiàn)代理:
-(GLuint)onPreProcessTexture:(GLuint)texture width:(CGFloat)width height:(CGFloat)height {
// OpenGL線程回調(diào)中厘唾, 調(diào)用拓幻的紋理渲染褥符,將渲染后的紋理傳給TXLivePush進(jìn)行推流
return [[TiSDKManager shareManager] renderTexture2D:texture Width:width Height:height Rotation:CLOCKWISE_0 Mirror:self.livePushLisher.config.frontCamera];
}
在OpenGL線程中回調(diào),在這里可以進(jìn)行采集圖像的二次處理
@param texture 紋理ID
@param width 紋理的寬度
@param height 紋理的高度
@return 返回給SDK的紋理
說明:SDK回調(diào)出來的紋理類型是GL_TEXTURE_2D阅嘶,接口返回給SDK的紋理類型也必須是GL_TEXTURE_2D; 該回調(diào)在SDK美顏之后. 紋理格式為GL_RGBA
- (GLuint)onPreProcessTexture:(GLuint)texture width:(CGFloat)width height:(CGFloat)height;
到這里属瓣, 騰訊云直播對接拓幻, 就結(jié)束了讯柔。
但是在測試過程中抡蛙, 發(fā)現(xiàn)了一個(gè)bug, 當(dāng)app啟動(dòng)后魂迄, 第一次調(diào)起美顏UI界面時(shí)粗截,背景容器圖層為空, 界面顯示不正常:
通過對拓幻的UI部分源碼的解讀捣炬, 發(fā)現(xiàn)在TiUIManager
中有美顏模塊的主要功能UI熊昌,也就是美顏UI的容器圖層tiUIViewBoxView
, 這個(gè)視圖中有分類功能圖層classifyView
湿酸,里面有一個(gè)方法:-(void)Judge_pro:(NSString *)key
, 這個(gè)方法主要處理功能圖層上的UI顯示婿屹, 所以直接調(diào)用一下這個(gè)方法, 在showMainMenuView
之前提現(xiàn)把所有的子控件都加載設(shè)置一遍:
[[TiUIManager shareManager].tiUIViewBoxView.classifyView Judge_pro:@""];
[[TiUIManager shareManager] showMainMenuView];
之后再次運(yùn)行推溃, 就正常顯示:
結(jié)束昂利!
如果對你有用就給個(gè)??吧~