1. 程式人生 > >RDVECore來自銳動的無UI,高度抽象化API的視頻編輯SDK

RDVECore來自銳動的無UI,高度抽象化API的視頻編輯SDK

ror rem 貼紙 ger file 水印圖片 path back 3.0

1 編寫目的

預期讀者:

有視頻編輯開發經驗或者無經驗的,打算或者正在使用“銳動IOSRDVECore”的相關工程師。

iOS軟件工程師。

產品經理。

QA

2 名詞解釋

分辨率:用於計算機視頻處理的圖像,以水平和垂直方向上所能顯示的像素數來表示分辨率。常見視頻分辨率的有1080P1920x1080720P1080x720640x480等。

幀率:每秒的幀數(fps)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數。

碼率: 數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。

寬高比:視頻分辨率的寬高比,常見的有16:94:31:1。銳動視頻編輯

SDK對各寬高比的視頻都支持編輯,導出的默認分辨率是640x360,寬高比是16:9

素材:來自系統相機,其他app,電腦,網絡的照片,音樂,視頻等。

虛擬視頻(VirtualVideo): 管理編輯中的包含場景、字幕水印等,用於預覽或導出時的容器或管理者。

場景(Scene):包含編輯中的媒體對象。

視頻變速:對視頻播放速度調整,實現慢鏡頭或者快鏡頭效果。

視頻配樂:選取本地或者網絡音樂作為視頻的背景音樂。

視頻配音:通過mic phone對視頻配音。

視頻濾鏡:調整視頻的畫面顏色效果。

濾鏡特效:在視頻裏面增加顫抖,心跳等效果

時間特效:在視頻裏面增加慢動作,重復等效果

3 RDVECore功能概述

RDVECore是銳動推出的無UI,高度抽象化API的視頻編輯SDK,支持以下功能:

3.1 豐富的編輯功能

RDVECore包含了豐富的基礎功能,對於編輯中的視頻、圖片、音樂有各種
處理方式,並且可以根據實際的業務需求,進行搭配組合,所有處理都可以精確
到毫秒級,達到最專業的的要求,主要功能如下:

l MV MV根據配置資源進行混合以及動畫,增強短視頻效果

l 濾鏡 RDVEUISDK本身提供豐富的濾鏡效果讓開發者進行選擇,同時用戶還可以根據自己的需求進行濾鏡擴展。

l 字幕特效 字幕特效支持在指定位置,指定時間段顯示;實時預覽效果

l 配音、配樂 支持指定時間段添加配音;

支持配音、配樂與視頻原音比例調節; 支持本地添加更多配樂

l 截取、分割 支持毫秒級截取、分割視頻; 支持快速預覽截取、分割後視頻

l 調速 調整視頻的播放速度,快放或者慢放

l 轉場 支持多種轉場; 支持隨機轉場、指定轉場時長等擴展設置

l 其它編輯功能 支持多種比例裁剪; 支持90、180、270度旋轉視頻畫面; 支持左右鏡像、上下鏡像; 支持輸出比例調整;

3.2 完善的視頻拍攝功能

  • 實時美顏 可以在拍攝過程中實時人臉美膚,提亮、美白等效果,達到人臉美化,同時支持美化程度的調節
  • 人臉貼紙/掛件 支持人臉識別及貼紙/掛件顯示
  • 拍攝自由定義
  • RDVECore在拍攝過程中,可以根據具體的錄制需求,進行自由化的設定,擁有更佳優異的拍攝錄制效果。

多段拍攝 一個視頻可以分多段次拍攝

攝像頭切換 前、後攝像頭自由切換,中間無卡頓

多比例支持 支持1:1 9:1616:9多個比例錄制

變焦、對焦 通過相應手勢可以縮放攝像頭采集畫面及清晰度

  • 濾鏡

在拍攝過程中,除了實時美顏,同時還可以實時添加濾鏡效果,RDVEUISDK本身提供豐富的濾鏡效果讓開發者進行選擇,同時用戶還可以根據自己的需求進行濾鏡擴展。

  • 照片 當前攝像頭畫面保存到圖片

RDVECore架構圖:

技術分享

RDVECore簡要流程圖:

技術分享

4 XCode集成步驟

4.1 運行環境

SDK支持iOS7.0及以上版本的設備,兼容iPhoneiPadiPod touch

4.2 註冊申請AppKeyAPPSecret

4.2.1 打開 http://www.rdsdk.com/ ,在銳動官網首頁選擇登 錄或註冊,新用戶先註冊,老用戶直接登錄。 ?

4.2.2 登錄完成後,進入視頻雲管理 點擊“+新增,填寫您應 用的名稱等,點擊提交,應用創建完成。 ?

4.2.3 創建應用完成後會自動跳轉至個人中心頁面,此時會獲 取到該應用的 AppKey AppSecret ?

4.3 下載並導入SDK

4.3.1 添加靜態庫libRDVECore.a和頭文件

技術分享

4.3.2 添加RDVECore.bundle

技術分享

4.3.3 工程設置

l TARGETSDeployment Info勾選豎屏(Portrait)(LandscapeLeftLandscapeRight)不勾選:

技術分享

l IOS10適配

在 Info.plist 中 添 加 NSCameraUsageDescription 、

NSMicrophoneUsageDescription、NSPhotoLibraryUsageDescription。

技術分享

l 添加引用蘋果官方

技術分享

如果錄制時使用faceU,還需要引用庫Accelerate.framework

技術分享

l 設置 Other Linker Flags?

在 TARGETS->Build Settings->Other Linker Flags 中加入-ObjC。

4.4 編輯視頻

4.4.1 引入頭文件始化

#import "RDVECore.h"

/** 初始化對象

*

* @param appkey 在銳動SDK官網(http://www.rdsdk.com/ )中註冊的應用Key。

* @param appsecret 在銳動SDK官網(http://www.rdsdk.com/ )中註冊的應用秘鑰。

* @param size 視頻分辨率

* @param fps 視頻幀率(1-30)

* @param resultFailBlock 初始化失敗的回調[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.3 MV

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;

/**持續時間

*/

@property (nonatomic ,assign) float duration;

/**多少圖片

*/

@property (nonatomic ,assign) NSInteger count;

/**圖片區域

*/

@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;

/** 文字旋轉度數

*/

@property (nonatomic ,assign) float tAngle;

/**文字顏色

*/

@property (nonatomic ,strong) UIColor *_Nullable tColor;

/**文字描邊顏色

*/

@property (nonatomic ,strong) UIColor * _Nullable strokeColor;

/**文字描邊寬度

*/

@property (nonatomic ,assign) float strokeWidth;

/** 文字區域

*/

@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)內,將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 倒序進度回調

*params: finishBlock 結束回調

*params: failBlock 失敗回調

*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官網(http://www.rdsdk.com/ )中註冊的應用Key。

* @param appsecret 在銳動SDK官網(http://www.rdsdk.com/ )中註冊的應用秘鑰。

* @param resultFailBlock 初始化失敗的回調[error:初始化失敗的錯誤碼]

*/

- (instancetype) initWithAPPKey:(NSString *)appkey

APPSecret:(NSString *)appsecret

resultFail:(void (^)(NSError *error))resultFailBlock;

4.5.2 錄制前設置錄制相關參數

/** 錄制之前準備,用於設置錄制相關參數。

* @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;

//美顏狀態

@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 錄制回調

/** 滑動切換到的當前濾鏡Index

*/

- (void) sendFilterIndex:(NSInteger) index;

/** 聚焦時回調

*/

- (void) tapTheScreenFocus;

/** 啟用預覽(startCamera)後回調。

* 可用於收到此回調前,界面上錄制相關按鈕不可用。

*/

- (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.5 faceU

//人臉道具貼紙證書

@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 <RDFilter *> *) filters;

/** 設置濾鏡

*/

- (void) setFilterAtIndex:(NSInteger ) index;

/** 移除濾鏡組

*/

- (void) removeFilters;

4.5.8 合並及倒序

/** 合並錄制文件

*/

- (void)mergeAndExportVideosAtFileURLs:(NSArray<RDCameraFile *> *)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 倒序進度回調

*params: callbackBlock 結束回調

*params: failBlock 失敗回調

*/

- (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;

RDVECore來自銳動的無UI,高度抽象化API的視頻編輯SDK