一般我們?cè)谂臄z時(shí)都會(huì)有 靜態(tài)貼紙 和 動(dòng)態(tài)貼紙 的需求摘符,如下圖所示
靜態(tài)貼紙
動(dòng)態(tài)貼紙
阿里云短視頻SDK也為開(kāi)發(fā)者提供了相關(guān)的API剿干,下面我就分別介紹 靜態(tài)貼紙 與 動(dòng)態(tài)貼紙 拍攝的實(shí)現(xiàn)過(guò)程
靜態(tài)貼紙
- 靜態(tài)貼紙一般用于添加一些水印,背景之類(lèi)的圖片。實(shí)現(xiàn)過(guò)程并不復(fù)雜,主要是調(diào)用
AliyunIRecorder.h
中添加圖片的API
/**
添加圖片
@param image 圖片
*/
- (int)applyImage:(AliyunEffectImage *)image;
實(shí)現(xiàn)步驟
- 引用文件
#import <AliyunVideoSDKPro/AliyunVideoSDKPro.h>
- 創(chuàng)建 recorder 屬性
@property (nonatomic,strong) AliyunIRecorder *recorder;
- 初始化 recorder
_recorder = [[AliyunIRecorder alloc] initWithDelegate:self videoSize:CGSizeMake(720, 1280)];
// 預(yù)覽視圖,必須設(shè)置
_recorder.preview = self.view;
// 攝像頭角度
_recorder.cameraRotate = 270;
/*
視頻的輸出路徑
注意:若上一次錄制的 outputPath 路徑的視頻存在沙盒里沒(méi)有刪除按傅,并且與本次錄制的視頻路徑且相同重名的話,錄制將會(huì)失敗
*/
_recorder.outputPath = outputPath;
// 視頻的輸出類(lèi)型
_recorder.outputType = AliyunIRecorderVideoOutputPixelFormatType420f;
/*
文件配置路徑
注意:若上一次錄制的 taskPath 路徑的視頻存在沙盒里沒(méi)有刪除胧卤,并且與本次錄制的視頻路徑相且同重名的話唯绍,錄制將會(huì)失敗
*/
_recorder.taskPath = taskPath;
// 美顏狀態(tài)
_recorder.beautifyStatus = YES;
// 設(shè)置美顏度 [0,100]
_recorder.beautifyValue = 0;
// 使用自帶人臉識(shí)別,開(kāi)啟該功能枝誊,系統(tǒng)會(huì)在檢測(cè)到有人臉動(dòng)圖加入時(shí)自動(dòng)進(jìn)行追蹤顯示
_recorder.useFaceDetect = YES;
// 后置攝像頭采集分辨率 默認(rèn):AVCaptureSessionPreset640x480
_recorder.backCaptureSessionPreset = AVCaptureSessionPreset1280x720;
// 前置攝像頭采集分辨率 默認(rèn):AVCaptureSessionPreset640x480
_recorder.frontCaptureSessionPreset = AVCaptureSessionPreset1280x720;
// 設(shè)置識(shí)別人臉的個(gè)數(shù) 最大是3個(gè) 最小是1個(gè) 如果不需要檢測(cè)人臉 使用:useFaceDetect = NO
_recorder.faceDetectCount = 2;
// 開(kāi)始預(yù)覽况芒,cameraPosition 攝像頭位置(前置、后置)
[_recorder startPreviewWithPositon:AliyunIRecorderCameraPositionBack];
// 設(shè)置視頻最大時(shí)長(zhǎng) 默認(rèn)8
_recorder.clipManager.maxDuration = 30;
// 初始化拍攝時(shí)的音樂(lè)對(duì)象叶撒,
AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:musicUrl];
music.startTime = 0;
music.duration = 30;
// 為拍攝的視頻添加音樂(lè)
[_recorder applyMusic:music];
- 初始化
AliyunEffectImage
對(duì)象绝骚,path
:沙盒中圖片的路徑,如:/var/mobile/Containers/Data/Application/E3226363-3BB2-406E-B694-48FCE996D18F/Documents/1542794682_9090.png
AliyunEffectImage *effectImage = [[AliyunEffectImage alloc] initWithFile:path];
- 將
effectImage
添加到recorder
上
[_recorder applyImage: effectImage];
動(dòng)態(tài)貼紙
- 動(dòng)態(tài)貼紙一般用于添加一些動(dòng)態(tài)的表情祠够,裝飾压汪,或者背景之類(lèi)的。實(shí)現(xiàn)過(guò)程相對(duì)比較復(fù)雜古瓤,主要是調(diào)用
AliyunIRecorder.h
中添加圖片的API
/**
添加動(dòng)圖
@param paster 動(dòng)圖
*/
- (int)applyPaster:(AliyunEffectPaster *)paster;
實(shí)現(xiàn)步驟
初始化
recorder
止剖,與 靜態(tài)貼紙 前三步一致,這里就不多贅述制作動(dòng)態(tài)貼紙文件夾:
-
創(chuàng)建一個(gè)文件夾落君,如圖創(chuàng)建一個(gè)名為
xiangkuang
的文件夾
image.png -
將動(dòng)態(tài)貼紙以
序列幀圖片
的形式放入文件夾中穿香,并且按照序列幀圖片
的順序,分別取名為xiangkuang0.png
绎速,xiangkuang1.png
皮获,xiangkuang2.png
...
注意:圖片的命名方式為:文件夾名 + 數(shù)字.png
。數(shù)字是從0開(kāi)始纹冤,按照序列幀圖片
的順序進(jìn)行自增
如下圖所示:
30AD0B41-DC9B-4D98-A3C4-765B0802DDA2.png -
創(chuàng)建
config.json
文件魔市,config.json
的作用主要是進(jìn)行一些參數(shù)配置主届,如下圖所示:
在圖中我已經(jīng)對(duì)一些重要的參數(shù)進(jìn)行了標(biāo)注
984D8E88-3CC1-4E54-B2AC-6C66367D08F0.png 將動(dòng)態(tài)貼紙文件夾存入沙盒中
- 初始化
AliyunEffectImage
對(duì)象赵哲,path
:沙盒中動(dòng)態(tài)貼紙文件夾的路徑待德,如:/var/mobile/Containers/Data/Application/2472A768-9517-4108-9C22-DDC5D3F64A9C/Library/Caches/DownloadShowDancePasterZip/xiangkuang
AliyunEffectPaster *effectPaster= [[AliyunEffectPaster alloc] initWithFile:path];
/*
AliyunPasterTypeNormal : 普通貼紙
AliyunPasterTypeFace : 人臉貼紙
*/
effectPaster.type = AliyunPasterTypeNormal;
- 將
effectPaster
添加到recorder
上,然后就可以看到動(dòng)態(tài)貼紙的效果了
[_recorder applyPaster: effectImage];