首先我們瞭解一下什麼是美顏SDK? SDK是軟體開發工具包用來輔助開發某一類軟體的相關文件及工具的集合。而美顏SDK顧名思義是三方服務商提供能夠實現美顏功能的工具包。隨著社交行業的發展,美顏SDK的應用範圍也在不斷地變廣。為我們所熟知的直播、音影片通話、短影片、特效相機等社交場景都能夠看到美顏SDK的應用,而平臺如何快速對接好美顏成為我們比較關心的話題。
MT美顏SDK
對接美顏可以簡單的分為三個步驟:
SDK初始化
·
初始化方法需要使用
key
進行鑑權,鑑權成功方可使用。
·
Android
初始化方法呼叫如下:
·
MtSDK。
get
()。
initSDK
(context,
“key”
,
new
MtSDK。InitCallback() {
·
@Override
·
public
void
onSuccess
() { }
·
·
@Override
·
public
void
onFailure
() { }
·
});
·
IOS
初始化方法呼叫如下:
初始化函式程式中呼叫一次即可生效,建議使用者在
Application
建立的時候呼叫
;
如果渲染功能使用不頻繁,也可以在使用的時候呼叫
·
-
(BOOL)application:(UIApplication
*
)application didFinishLaunchingWithOptions:(NSDictionary
*
)launchOptions
·
{
·
//
線上鑑權初始化方法
·
·
[[MtSDK Get] initSDK:
“
鑑權的
key”
withDelegate:
self
];
·
return
YES;
·
}
·
#
pragma
mark - MtSDKDelegate
·
-
(
void
)onSuccess {
·
NSLog
(
@“MtSDK
載入成功
”
);
·
}
·
-
(
void
)onFailure {
·
NSLog
(
@“MtSDK
載入失敗
”
);
·
}
·
在日誌欄搜尋
InitInfo
,可檢視版本資訊和初始化狀態。
渲染步驟
Android平臺
·
定義布林變數
bool
,用來標誌渲染方法是否初始化完成,然後根據得到的影片幀格式的不同,使用對應的方法進行渲染;
·
GL_TEXTURE_EXTERNAL_OES
紋理格式,首先呼叫渲染初始化方法
initRenderTextureOES
,當返回
true
時初始化完成;然後呼叫渲染方法
renderTextureOES
,返回值為
GL_TEXTURE_2D
型別的紋理:
·
/**
·
*
紋理渲染初始化
·
*
·
* @param width
紋理寬度
·
* @param height
紋理高度
·
* @param rotation
紋理是否需要旋轉,不需旋轉為
CLOCKWISE_0
·
* @param isMirror
紋理是否存在映象
·
* @param number
人臉檢測數目上限設定,推薦取值範圍為
1~5
·
*/
·
public
boolean
initRenderTextureOES
(
int
width,
int
height, MtRotation rotation,
boolean
isMirror,
int
number);
·
·
/**
·
*
渲染
·
*
·
* @param textureOES
紋理
id
·
*/
·
public
int
renderTextureOES
(
int
textureOES);
·
·
/**
·
*
使用方法
·
*/
·
if
(
!
bool) {
·
bool
=
MtSDK。
get
()。
initRenderTextureOES
(width, height, rotation, isMirror, number);
·
}
·
int
textureId
=
MtSDK。
get
()。
renderTextureOES
(textureOES);
·
byte[]
影片幀,首先呼叫渲染初始化方法
initRenderPixels
,當返回
true
時初始化完成;然後呼叫渲染方法
renderPixels
:
·
/**
·
*
影片幀渲染初始化
·
*
·
* @param width
影片幀寬度
·
* @param height
影片幀高度
·
* @param rotation
影片幀是否需要旋轉,不需旋轉為
CLOCKWISE_0
·
* @param isMirror
影片幀是否存在映象
·
* @param number
人臉檢測數目上限設定,推薦取值範圍為
1~5
·
*/
·
public
boolean
initRenderPixels
(
int
width,
int
height, MtRotation rotation,
boolean
isMirror,
int
number);
·
/**
·
*
渲染
·
*
·
* @param data
影片幀陣列
·
*/
·
public
void
renderPixels
(
byte[]
data);
·
·
/**
·
*
使用方法
·
*/
·
if
(
!
bool) {
·
bool
=
MtSDK。
get
()。
initRenderPixels
(width, height, rotation, isMirror, number);
·
}
·
MtSDK。
get
()。
renderPixels
(data);
銷燬
·
結束渲染時,根據影片幀格式的不同,呼叫對應的
destroy
方法釋放掉資源,呼叫位置通常在
影片幀回撥介面
的銷燬處,或者是
Activity
,
Fragment
的銷燬處,同時將定義的布林變數
bool
置為
false
:
·
/**
·
*
使用其中一個
·
*/
·
MtSDK。
get
()。
destroyRenderPixels
();
·
MtSDK。
get
()。
destroyRenderTexture
();
·
MtSDK。
get
()。
destroyRenderTextureOES
();
·
·
/*
·
*
將
bool
置為
false
·
*/
bool
=
false
;
渲染步驟
IOS平臺
·
新建
[MtSDK Get]
管理器物件,所有的渲染都必須透過
[MtSDK Get]
物件呼叫,
[MtSDK Get]
的預設建構函式,新建預設渲染引數的渲染器物件
;
也可以透過具體功能函式來
預設
[MtSDK Get]
的渲染引數,程式碼如下
:
·
//
自定義渲染引數
·
[[MtSDK Get] setRenderEnable:YES];
·
[[[MtSDK Get] setWhitenessValue:
100
];
·
……
·
渲染
GL_TEXTURE_2D
的紋理,呼叫
[MtSDK Get]
的
renderTexture2D
方法,返回
GL_TEXTURE_2D
型別的紋理
ID
,程式碼如下
:
·
//
預設人臉相關特效可支援人臉數
·
BOOL isRenderInit
=
false;
//initRenderTextureWidth
初始化方法一般只執行一次該
isRenderInit
引數應設為全域性變數在釋放資源的時候從新設為
NO
·
if
(
!
isRenderInit){
·
isRenderInit
=
[[MtSDK Get] initRenderTextureWidth:imageWidth
·
Height:imageHeight
·
Rotation:CLOCKWISE_90
·
Mirror:YES
·
FaceNumber:
5
];
·
}
·
int
textureId
=
[[MtSDK Get] renderTexture:texture2D];
//2D
紋理
Id
·
渲染
CVPixelBufferRef
影片幀,呼叫
[MtSDK Get]
的
renderPixels
方法,返回渲染後的影片
幀,程式碼如下
:
·
//
預設人臉相關特效可支援人臉數
·
BOOL isRenderInit
=
false;
//initRenderTextureWidth
初始化方法一般只執行一次該
isRenderInit
引數應設為全域性變數在釋放資源的時候從新設為
NO
·
if
(
!
isRenderInit){
·
isRenderInit
=
[[MtSDK Get] initRenderPixelsFormat:BGRA
·
Width:imageWidth
·
Height:imageHeight
·
Rotation:CLOCKWISE_90
·
Mirror:YES
·
FaceNumber:
5
];
·
}
·
[[MtSDK Get] renderPixels:baseAddress];
銷燬
·
渲染結束,要釋放渲染資源,否則會造成記憶體洩漏,一般隨著渲染資料回撥介面的銷燬釋放,或者隨著生命週期結束釋放。釋放資源呼叫
[MtSDK Get]
的
destroy
方法,程式碼如下
:
·
//TEXTURE_2D
的紋理的釋放方法
·
[[MtSDK Get] destroyRenderTexture];
·
_isRenderInit
=
false;
·
//
影片幀的釋放方法
·
[[MtSDK Get] destroyRenderPixels];
·
_isRenderInit
=
false;
成功對接好美顏SDK後自然是比較在意它的使用效果,這也是為什麼各個平臺爭相接入美顏SDK的原因。美顏SDK的接入可以提升使用者的使用感,幫助平臺引流,增強使用者與平臺之間的黏性。現在市面上出現很多第三方美顏服務商,所以在挑選美顏SDK也要有多方面的考量要選擇專業的美顏服務商。