1編寫目的
預期讀者:
有視頻編輯開發(fā)經(jīng)驗或者無經(jīng)驗的访娶,打算或者正在使用“銳動IOS版RDVECore”的相關工程師。
iOS軟件工程師觉阅。
產(chǎn)品經(jīng)理崖疤。
QA
2名詞解釋
分辨率:用于計算機視頻處理的圖像,以水平和垂直方向上所能顯示的像素數(shù)來表示分辨率留拾。常見視頻分辨率的有1080P即1920x1080戳晌,720P即1080x720鲫尊,640x480等痴柔。
幀率:每秒的幀數(shù)(fps)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數(shù)。
碼率: 數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒疫向。
寬高比:視頻分辨率的寬高比咳蔚,常見的有16:9豪嚎,4:3,1:1谈火。銳動視頻編輯SDK對各寬高比的視頻都支持編輯侈询,導出的默認分辨率是640x360,寬高比是16:9糯耍。
素材:來自系統(tǒng)相機扔字,其他app,電腦温技,網(wǎng)絡的照片革为,音樂,視頻等舵鳞。
虛擬視頻(VirtualVideo): 管理編輯中的包含場景震檩、字幕水印等,用于預覽或導出時的容器或管理者蜓堕。
場景(Scene):包含編輯中的媒體對象抛虏。
視頻變速:對視頻播放速度調(diào)整,實現(xiàn)慢鏡頭或者快鏡頭效果套才。
視頻配樂:選取本地或者網(wǎng)絡音樂作為視頻的背景音樂迂猴。
視頻配音:通過mic phone對視頻配音。
視頻濾鏡:調(diào)整視頻的畫面顏色效果霜旧。
濾鏡特效:在視頻里面增加顫抖错忱,心跳等效果
時間特效:在視頻里面增加慢動作,重復等效果
3RDVECore功能概述
RDVECore是銳動推出的無UI,高度抽象化API的視頻編輯SDK,支持以下功能:
3.1豐富的編輯功能
RDVECore包含了豐富的基礎功能挂据,對于編輯中的視頻以清、圖片、音樂有各種 處理方式崎逃,并且可以根據(jù)實際的業(yè)務需求掷倔,進行搭配組合,所有處理都可以精確 到毫秒級个绍,達到最專業(yè)的的要求勒葱,主要功能如下:
MVMV根據(jù)配置資源進行混合以及動畫,增強短視頻效果
濾鏡RDVEUISDK本身提供豐富的濾鏡效果讓開發(fā)者進行選擇巴柿,同時用戶還可以根據(jù)自己的需求進行濾鏡擴展凛虽。
字幕特效字幕特效支持在指定位置,指定時間段顯示广恢;實時預覽效果
配音凯旋、配樂支持指定時間段添加配音; 支持配音、配樂與視頻原音比例調(diào)節(jié)至非; 支持本地添加更多配樂
截取钠署、分割支持毫秒級截取、分割視頻荒椭; 支持快速預覽截取谐鼎、分割后視頻
調(diào)速調(diào)整視頻的播放速度,快放或者慢放
轉場支持多種轉場趣惠; 支持隨機轉場狸棍、指定轉場時長等擴展設置
其它編輯功能支持多種比例裁剪; 支持90味悄、180隔缀、270度旋轉視頻畫面; 支持左右鏡像傍菇、上下鏡像猾瘸; 支持輸出比例調(diào)整;
3.2完善的視頻拍攝功能
·實時美顏可以在拍攝過程中實時人臉美膚丢习,提亮牵触、美白等效果,達到人臉美化咐低,同時支持美化程度的調(diào)節(jié)
·人臉貼紙/掛件支持人臉識別及貼紙/掛件顯示
·拍攝自由定義
· RDVECore在拍攝過程中揽思,可以根據(jù)具體的錄制需求,進行自由化的設定见擦,擁有更佳優(yōu)異的拍攝錄制效果钉汗。
多段拍攝一個視頻可以分多段次拍攝
攝像頭切換前、后攝像頭自由切換鲤屡,中間無卡頓
多比例支持支持1:1 损痰、9:16、16:9多個比例錄制
變焦酒来、對焦通過相應手勢可以縮放攝像頭采集畫面及清晰度
·濾鏡
在拍攝過程中卢未,除了實時美顏,同時還可以實時添加濾鏡效果堰汉,RDVEUISDK本身提供豐富的濾鏡效果讓開發(fā)者進行選擇辽社,同時用戶還可以根據(jù)自己的需求進行濾鏡擴展。
·照片當前攝像頭畫面保存到圖片
RDVECore架構圖:
RDVECore簡要流程圖:
4XCode集成步驟
4.1運行環(huán)境
SDK支持iOS7.0及以上版本的設備翘鸭,兼容iPhone滴铅、iPad、iPod touch
4.2注冊申請AppKey和APPSecret
4.2.1打開http://www.rdsdk.com/就乓,在銳動官網(wǎng)首頁選擇登錄或注冊汉匙,新用戶先注冊譬淳,老用戶直接登錄。
4.2.2登錄完成后盹兢,進入視頻云管理點擊“+新增”,填寫您應用的名稱等守伸,點擊“提交”绎秒,應用創(chuàng)建完成。
4.2.3創(chuàng)建應用完成后會自動跳轉至個人中心頁面尼摹,此時會獲取到該應用的 AppKey 和 AppSecret见芹。
4.3下載并導入SDK
4.3.1添加靜態(tài)庫libRDVECore.a和頭文件
4.3.2添加RDVECore.bundle
4.3.3工程設置
TARGETS的Deployment Info僅勾選豎屏(Portrait),橫屏(LandscapeLeft蠢涝、LandscapeRight)不勾選:
IOS10適配
在 Info.plist 中 添 加 NSCameraUsageDescription 玄呛、
NSMicrophoneUsageDescription、NSPhotoLibraryUsageDescription和二。
添加引用蘋果官方庫
如果錄制時使用faceU徘铝,還需要引用庫Accelerate.framework
設置 Other Linker Flags
在 TARGETS->Build Settings->Other Linker Flags 中加入-ObjC。
4.4編輯視頻
4.4.1引入頭文件及初始化
#import "RDVECore.h"
/** 初始化對象
*
* @param appkey 在銳動SDK官網(wǎng)(http://www.rdsdk.com/)中注冊的應用Key惯吕。
* @param appsecret 在銳動SDK官網(wǎng)(http://www.rdsdk.com/)中注冊的應用秘鑰惕它。
* @param size 視頻分辨率
* @param fps 視頻幀率(1-30)
* @param resultFailBlock 初始化失敗的回調(diào)[error:初始化失敗的錯誤碼]
*/
- (instancetype) initWithAPPKey:(NSString *)appkey
APPSecret:(NSString *)appsecret
videoSize:(CGSize)size
fps:(int)fps
resultFail:(void (^)(NSError *error))resultFailBlock;
4.4.2構造虛擬視頻并添加到播放器
1、 構造一個或多個場景废登,并設置場景的相應屬性
NSMutableArray *scenes = [NSMutableArray new];
RDScene *scene = [[RDScene alloc] init];
(設置場景的相應屬性)
[scenes addObject:scene];
2淹魄、 將場景添加到播放器中
[_videoCoreSDK addScenes:scenes];
3、 設置播放器屬性
_videoCoreSDK.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width);
_videoCoreSDK.delegate = self;
_videoCoreSDK.shouldRepeat = YES;
4堡距、 構造虛擬視頻
[_videoCoreSDK build];
5甲锡、 將播放器添加到視圖中
[self.view addSubview:_videoCoreSDK.view];
4.4.3MV
1、 初始化MV
NSMutableArray *selectMVEffects = [NSMutableArray array];
VVMovieEffect *mvEffect = [[VVMovieEffect alloc] init];
[selectMVEffects addObject:mvEffect];
2羽戒、 設置MV屬性
//MV路徑
@property (nonatomic,strong) NSURL* _Nullable url;
//MV顯示時長
@property (nonatomic,assign) CMTimeRange timeRange;
//MV類型
@property (nonatomic,assign) RDVideoMVEffectType type;
3缤沦、 將MV添加到播放器中,或者將MV從播放器中移除
1) 添加[_videoCoreSDK addMVEffect:selectMVEffects];
2) 移除[_videoCoreSDK addMVEffect:nil];
4易稠、 重新構造虛擬視頻
[_videoCoreSDK build];
4.4.4配樂
1疚俱、 初始化配樂
RDMusic *music = [[RDMusic alloc] init];
2、 設置配樂屬性
/**音樂總時間范圍
*/
@property (nonatomic, assign) CMTimeRange timeRange;
/**音樂截取時間范圍
*/
@property (nonatomic, assign) CMTimeRange clipTimeRange;
/**音樂名稱
*/
@property (nonatomic, strong) NSString *_Nullable name;
/**音量(0.0-1.0)缩多,默認為1.0
*/
@property (nonatomic, assign) float volume;
/**是否重復播放
*/
@property (nonatomic, assign) BOOL isRepeat;
3呆奕、 將配樂添加到播放器中,或者將配樂從播放器中移除
1) 添加:[_videoCoreSDK addMusic:music];
2) 移除:[_videoCoreSDK addMusic:nil];
4衬吆、 重新構造虛擬視頻
[_videoCoreSDK build];
4.4.5配音
1梁钾、 初始化配音
NSMutableArray *dubbingArr = [NSMutableArray array];
RDMusic *music = [[RDMusic alloc] init];
[dubbingArr addObject:music];
2、 設置配音屬性:同配樂
3逊抡、 將配音添加到播放器中姆泻,或者將配音從播放器中移除
1) 添加:[_videoCoreSDK addDubbingMusics:dubbingArr];
2) 移除:[_videoCoreSDK addDubbingMusics:nil];
4零酪、 重新構造虛擬視頻
[_videoCoreSDK build];
4.4.6字幕、特效
1拇勃、 在初始化播放器時設置
_videoCoreSDK.frameLayerBlock = ^(CMTime currentTime, CALayer *layer) {
[weakSelf addSubLayerToFront:layer time:currentTime];
};
2四苇、 初始化字幕(特效)
NSMutableArray *effects = [NSMutableArray array];
RDCaption *caption = [[RDCaption alloc] init];
[effects addObject:caption];
3、 設置字幕(特效)屬性
/**字幕中心坐標點比例
*/
@property (nonatomic ,assign) CGPoint captionCenter;
/**字幕寬度點比例
*/
@property (nonatomic ,assign) CGFloat widthProportion;
/**字幕幀率
*/
@property (nonatomic ,assign) CGFloat fps;
/**字幕時間范圍
*/
@property (nonatomic ,assign) CMTimeRange timeRange;
/**字幕旋轉角度
*/
@property (nonatomic ,assign) float angle;
/**字幕縮放大小
*/
@property (nonatomic ,assign) float scale;
/**id
*/
@property (nonatomic ,assign) NSInteger pid;
/**貼圖類型 0 帶文字,1 不帶文字
*/
@property (nonatomic ,assign) NSInteger type;
/** 字幕圖片文件路徑
*/
@property (nonatomic ,copy) NSString *_Nullable path;
/**圖片前綴名字
*/
@property (nonatomic ,copy) NSString *_Nullable name;
/**持續(xù)時間
*/
@property (nonatomic ,assign) float duration;
/**多少圖片
*/
@property (nonatomic ,assign) NSInteger count;
/**圖片區(qū)域
*/
@property (nonatomic ,assign) CGRect frame;
/**原始圖片大小
*/
@property (nonatomic ,assign) CGSize size;
/**圖片文字
*/
@property (nonatomic ,copy) NSString *_Nullable pText;
/** 文字圖片
*/
@property (nonatomic ,strong) UIImage *_Nullable tImage;
/**文字字體名稱
*/
@property (nonatomic ,copy) NSString *_Nullable tFontName;
/**文字字體大小
*/
@property (nonatomic ,assign) float tFontSize;
/** 文字旋轉度數(shù)
*/
@property (nonatomic ,assign) float tAngle;
/**文字顏色
*/
@property (nonatomic ,strong) UIColor *_Nullable tColor;
/**文字描邊顏色
*/
@property (nonatomic ,strong) UIColor * _Nullable strokeColor;
/**文字描邊寬度
*/
@property (nonatomic ,assign) float strokeWidth;
/** 文字區(qū)域
*/
@property (nonatomic ,assign) CGRect tFrame;
/**文字開始時間
*/
@property (nonatomic ,assign) float tBegin;
/**文字結束時間
*/
@property (nonatomic ,assign) float tEnd;
/**幀動畫
*/
@property (nonatomic ,strong) NSArray *_Nullable frames;
/**時間動畫
*/
@property (nonatomic ,strong) NSArray *_Nullable times;
/** 字幕是否支持拉伸
*/
@property (nonatomic, assign) BOOL tStretching;
/**字幕拉伸的
*/
@property (nonatomic ) UIEdgeInsets edgeInsets;
/**字幕拉伸的
*/
@property (nonatomic ) CGRect contentsCenter;
/**音樂
*/
@property (nonatomic , strong) RDMusic *_Nullable music;
4方咆、 初始化CaptionLayer
CaptionLayer* captionLayer = [[CaptionLayer alloc] initWithCaption:caption videoSize:videoSize];
* videoSize:初始化播放器時月腋,設置的視頻分辨率
5、 在字幕(特效)的顯示范圍(timeRange)內(nèi)瓣赂,將captionLayer添加到1榆骚、中的layer上。
具體參照RDVEUISDK煌集。
4.4.7濾鏡
1妓肢、 添加所有的濾鏡
NSMutableArray *globalFilters = [NSMutableArray array];
1) 初始化濾鏡
RDFilter* filter = [RDFilter new];
[globalFilters addObject:filter];
2) 設置濾鏡屬性
/**濾鏡類型
*/
@property (nonatomic,assign)NSInteger type;
/**濾鏡名稱
*/
@property (nonatomic,copy )NSString *name;
/**濾鏡acv地址
*/
@property (nonatomic,copy )NSString *acvPath;
3) 添加所有濾鏡
[_videoCoreSDK addGlobalFilters:globalFilters];
2、 設置濾鏡
[_videoCoreSDK setGlobalFilter:selectFilterIndex];
4.4.8倒放
/** 倒序
*params: url 視頻源地址
*params: outputUrl 輸出路徑
*params: timeRange 倒序時間范圍
*params: videoSpeed 視頻速度
*params: progressBlock 倒序進度回調(diào)
*params: finishBlock 結束回調(diào)
*params: failBlock 失敗回調(diào)
*params: cancel 是否取消
*/
+ (void)exportReverseVideo:(NSURL *)url
outputUrl:(NSURL *)outputUrl
timeRange:(CMTimeRange)timeRange
videoSpeed:(float)speed
progressBlock:(void (^)(NSNumber *prencent))progressBlock
callbackBlock:(void (^)())finishBlock
fail:(void (^)())failBlock
cancel:(BOOL *)cancel;
4.4.9水印
/**添加水印
* @param image 水印圖片
* @param point 水印在視頻中相對于左上角的位置(值為:0.0~1.0)
* @param scale 水印的縮放比例苫纤,默認為1(圖片的原始大小)
*/
- (void) addWaterMark:(UIImage *)image withPoint:(CGPoint)point scale:(CGFloat)scale;
/**添加文字水印
* @param waterText 水印文字
* @param waterColor 水印文字的顏色
* @param waterFont 水印文字的字體
* @param point 水印在視頻中相對于左上角的位置(值為:0.0~1.0)
*/
- (void) addWaterMark:(NSString *)waterText color:(UIColor *)waterColor font:(UIFont *)waterFont withPoint:(CGPoint)point;
/**移除水印
*/
- (void)removeWaterMark;
/**添加片尾LOGO
* @param logoImage LOGO圖片
* @param userName 用戶名
* @param showDuration 展示時長
* @param fadeDuration 淡入時長
*/
- (void) addEndLogoMark:(UIImage *)logoImage userName:(NSString *)userName showDuration:(float)showDuration fadeDuration:(float)fadeDuration;
/**移除片尾LOGO
*/
- (void)removeEndLogoMark;
4.4.10獲取縮略圖
/**獲取某個時間點的縮略圖
*/
- (UIImage*)getImageAtTime:(CMTime) outputTime scale:(float) scale;
4.4.11導出視頻
/** 導出視頻
*params: movieURL 輸出路徑
*params: size 分辨率大小
*params: bitrate 碼率(例:設置為5M碼率碉钠,傳值為5)
*params: fps 幀率
*params: maxExportVideoDuration 最大導出時長 默認為0 不限制
*params: progress 導出進度
*params: success 完成
*params: fail 失敗
*/
- (void)exportMovieURL:(NSURL*) movieURL
size:(CGSize) size
bitrate:(int)bitrate
fps:(int)fps
maxExportVideoDuration:(float)maxExportVideoDuration
progress:(void(^)(float))progress
success:(void(^)())success
fail:(void(^)(NSError*))fail;
/** 取消導出
*/
- (void)cancelExportMovie:(void(^)())cancelBlock;
4.4.12編輯完成后釋放
[_videoCoreSDK stop];
_videoCoreSDK.delegate = nil;
_videoCoreSDK = nil;
4.5錄制視頻
4.5.1引入頭文件及初始化
#import "RDCameraManager.h"
/** 初始化對象
*
* @param appkey 在銳動SDK官網(wǎng)(http://www.rdsdk.com/)中注冊的應用Key。
* @param appsecret 在銳動SDK官網(wǎng)(http://www.rdsdk.com/)中注冊的應用秘鑰卷拘。
* @param resultFailBlock 初始化失敗的回調(diào)[error:初始化失敗的錯誤碼]
*/
- (instancetype) initWithAPPKey:(NSString *)appkey
APPSecret:(NSString *)appsecret
resultFail:(void (^)(NSError *error))resultFailBlock;
4.5.2錄制前設置錄制相關參數(shù)
/** 錄制之前準備放钦,用于設置錄制相關參數(shù)。
* @param frame 錄制預覽視圖位置大小
* @param superview 源視圖控制器
* @param bitrate 錄制碼率
* @param fps 錄制幀率
* @param mode 錄制視頻方式:YES:正方形 NO:全屏
* @param size 錄制視頻分辨率
* @param isFront 是否是前置攝像頭錄制
* @param faceU 是否使用faceU
*/
- (void) prepareRecordWithFrame:(CGRect)frame
superview:(UIView *)superview
bitrate: (int) bitrate
fps: (int) fps
mode: (BOOL) mode
writerSize: (CGSize) size
isFront:(BOOL) isFront
faceU:(BOOL) faceU;
//左右滑動錄制預覽視圖時恭金,是否切換濾鏡操禀。默認為YES(切換)
@property (nonatomic, assign) BOOL swipeScreenIsChangeFilter;
//美顏狀態(tài)
@property (nonatomic , assign) BeautifyState beautifyState;
/** 設置對焦圖片
*/
- (void) setfocus;
4.5.3錄制
/** 啟用預覽
*/
- (void) startCamera;
/** 關閉預覽
*/
- (void) stopCamera;
/** 開始錄制
*/
- (void) beginRecording;
/** 停止錄制
*/
- (void) stopRecording;
/** 拍照
*/
- (void) takePhoto:(int)orientation block:(void(^)(UIImage* image)) func;
/** 聚焦
*/
- (void) focus:(UITapGestureRecognizer *)tap;
/** 切換錄制視頻方式
* @parma mode:YES:正方形 NO:全屏
* @parma frame:錄制預覽視圖位置大小
*/
- (void) changeMode:(BOOL) mode cameraScreenFrame:(CGRect)frame;
4.5.4錄制回調(diào)
/** 滑動切換到的當前濾鏡Index
*/
- (void) sendFilterIndex:(NSInteger) index;
/** 聚焦時回調(diào)
*/
- (void) tapTheScreenFocus;
/** 啟用預覽(startCamera)后回調(diào)。
* 可用于收到此回調(diào)前横腿,界面上錄制相關按鈕不可用颓屑。
*/
- (void) cameraScreenDid;
/** 當前錄制時間
*/
- (void) currentTime:(float) time;
/** 滑動錄制預覽視圖開始
* @params swipDirection (0 :左劃 1:右劃)
*/
- (void) swipeScreenBegin:(NSInteger)swipDirection;
/** 滑動錄制預覽視圖中
* @param percent 滑動動預覽視圖中的位置
* @param swipDirection (0 :左劃 1:右劃)
*/
- (void) swipeScreenChanging:(float)percent swipDirection:(NSInteger)swipDirection;
/** 滑動錄制預覽視圖結束
* @params swipDirection (0 :左劃 1:右劃)
*/
- (void) swipeScreenChangeEnd:(NSInteger)swipDirection;
/** 錄制開始
*/
- (void) movieRecordBegin;
/** 錄制取消
*/
- (void) movieRecordCancel;
/** 錄制結束
*/
- (void) movieRecordingCompletion:(NSURL *) videoUrl;
4.5.5faceU
//人臉道具貼紙證書
@property (nonatomic , assign) void* faceUAuth;
//人臉道具貼紙證書長度
@property (nonatomic , assign) unsigned int faceUAuthlength;
//瘦臉 0.0~1.0 默認0.68
@property (nonatomic , assign) float cheekThinning;
//大眼 0.0~2.0 默認1.53
@property (nonatomic , assign) float eyeEnlarging;
//美白 0.0~1.0 默認0.48
@property (nonatomic , assign) float colorLevel;
//磨皮 1 2 3 4 5 6 默認3
@property (nonatomic , assign) float blurLevel;
//瘦臉等級 0.0 ~ 1.0 默認1.0
@property (nonatomic , assign) float faceShapeLevel;
//瘦臉類型
@property (nonatomic , assign) float faceShape;
/** 切換FaceUItem
*/
- (void) changeFaceUItem:(NSString*) itemString withName:(NSString*)name;
4.5.6錄制時播放音樂
/**使用音樂路徑
*/
- (void)setMusic:(NSURL *)musicUrl;
/** 播放音樂 rate(極慢:1.0/3.0 慢:1.0/2.0 正常:1.0 快:2.0 極快:3.0)
*/
- (void)playMusic:(float)rate;
/** 暫停音樂
*/
- (void)pauseMusic;
/** 停止播放音樂
*/
- (void)stopMusic;
4.5.7濾鏡
/** 添加濾鏡組
*/
- (void) addFilters:(NSArray *) filters;
/** 設置濾鏡
*/
- (void) setFilterAtIndex:(NSInteger ) index;
/** 移除濾鏡組
*/
- (void) removeFilters;
4.5.8合并及倒序
/** 合并錄制文件
*/
- (void)mergeAndExportVideosAtFileURLs:(NSArray *)fileArray
progress:(void(^)(NSNumber *progress))progressBlock
finish:(void(^)(NSURL *videourl))finish
fail:(void(^)(NSError *error))fail
cancel:(void(^)())cancel;
/** 取消合并
*/
- (void)cancelMerge;
/** 倒序
*params: url 視頻源地址
*params: outputUrl 輸出路徑
*params: timeRange 倒序時間范圍
*params: progressBlock 倒序進度回調(diào)
*params: callbackBlock 結束回調(diào)
*params: failBlock 失敗回調(diào)
*/
- (void)exportReverseVideo:(NSURL *)url
outputUrl:(NSURL *)outputUrl
timeRange:(CMTimeRange)timeRange
progressBlock:(void (^)(NSNumber *prencent))progressBlock
callbackBlock:(void (^)())callbackBlock
fail:(void (^)())failBlock;
4.5.9獲取帶濾鏡效果的截圖
/** 獲取帶濾鏡的縮略圖
*/
+(void) returnImageWith:(UIImage *)inputImage
Filter:(RDFilter *)obj
withCompletionHandler:(void (^)(UIImage *processedImage))block;
4.5.10錄制完成后釋放
[_cameraManager stopCamera];
[_cameraManager deleteItems];
_cameraManager.delegate = nil;
_cameraManager = nil;