RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版相关的知识,希望对你有一定的参考价值。

 RDVECore功能概述

RDVECore是锐动推出的无UI,高度抽象化API的视频编辑SDK,支持以下功能:

1.1 丰富的编辑功能

RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种 处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确 到毫秒级,达到最专业的的要求,主要功能如下:

MV MV根据配置资源进行混合以及动画,增强短视频效果

滤镜 RDVEUISDK本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。

字幕特效 字幕特效支持在指定位置,指定时间段显示;实时预览效果

配音、配乐 支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐

截取、分割 支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频

调速 调整视频的播放速度,快放或者慢放

转场 支持多种转场; 支持随机转场、指定转场时长等扩展设置

其它编辑功能 支持多种比例裁剪; 支持90、180、270度旋转视频画面; 支持左右镜像、上下镜像; 支持输出比例调整;

1.2 完善的视频拍摄功能

 实时美颜 可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节

人脸贴纸/挂件 支持人脸识别及贴纸/挂件显示

拍摄自由定义

RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。

多段拍摄 一个视频可以分多段次拍摄

摄像头切换 前、后摄像头自由切换,中间无卡顿

多比例支持 支持1:1 、9:16、16:9多个比例录制

变焦、对焦 通过相应手势可以缩放摄像头采集画面及清晰度

 滤镜在拍摄过程中,除了实时美颜,同时还可以实时添加滤镜效果,RDVEUISDK本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。

 照片 当前摄像头画面保存到图片

RDVECore架构图:

技术分享

RDVECore简要流程图:

技术分享


2 XCode集成步骤

2.1 运行环境

SDK支持ios7.0及以上版本的设备,兼容iPhone、iPad、iPod touch

2.2 注册申请AppKey和APPSecret

2.2.1 打开 rdsdk.com/ ,在锐动官网首页选择登 录或注册,新用户先注册,老用户直接登录。

2.2.2 登录完成后,进入视频云管理 点击“+新增”,填写您应 用的名称等,点击“提交”,应用创建完成。

2.2.3 创建应用完成后会自动跳转至个人中心页面,此时会获 取到该应用的 AppKey 和 AppSecret。

2.3 下载并导入SDK

2.3.1 添加静态库libRDVECore.a和头文件

技术分享


2.3.2 添加RDVECore.bundle

技术分享


2.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。

2.4 编辑视频

2.4.1 引入头文件及初始化

#import "RDVECore.h"

/** 初始化对象

*

* @param appkey 在锐动SDK官网(rdsdk.com/ )中注册的应用Key。

* @param appsecret 在锐动SDK官网(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;

2.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];

2.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];

2.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];

2.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];

2.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。

2.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];

2.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;

2.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;

2.4.10 获取缩略图

/**获取某个时间点的缩略图

*/

- (UIImage*)getImageAtTime:(CMTime) outputTime scale:(float) scale;

2.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;

2.4.12 编辑完成后释放

[_videoCoreSDK stop];

_videoCoreSDK.delegate = nil;

_videoCoreSDK = nil;

2.5 录制视频

2.5.1 引入头文件及初始化

#import "RDCameraManager.h"

/** 初始化对象

*

* @param appkey 在锐动SDK官网(rdsdk.com/ )中注册的应用Key。

* @param appsecret 在锐动SDK官网(rdsdk.com/ )中注册的应用秘钥。

* @param resultFailBlock 初始化失败的回调[error:初始化失败的错误码]

*/

- (instancetype) initWithAPPKey:(NSString *)appkey

APPSecret:(NSString *)appsecret

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

2.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;

2.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;

以上是关于RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版的主要内容,如果未能解决你的问题,请参考以下文章

RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版

RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK

关于锐动的直播ios SDK解决方案

锐动IOS带UI视频编辑SDK

锐动视频编辑SDK接入说明

Flutter:继承自抽象的无状态小部件