菱绿 发表于 2018-05-24 17:28

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


1 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?打开 http://www.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官网(http://www.rdsdk.com/ )中注册的应用Key。
*@param appsecret       在锐动SDK官网(http://www.rdsdk.com/ )中注册的应用秘钥。
*@paramsize         视频分辨率
*@paramfps            视频帧率(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 = ;
RDScene *scene = [ init];
(设置场景的相应属性)
;
2、将场景添加到播放器中
;
3、设置播放器属性
      _videoCoreSDK.frame = CGRectMake(0, 0, .bounds.size.width, .bounds.size.width);
    _videoCoreSDK.delegate = self;
    _videoCoreSDK.shouldRepeat = YES;
4、构造虚拟视频
;
5、将播放器添加到视图中
;


2.4.3MV

1、初始化MV
NSMutableArray *selectMVEffects = ;
VVMovieEffect *mvEffect = [ init];
;
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)添加;
2)移除;
4、重新构造虚拟视频
;



2.4.4配乐

1、初始化配乐
RDMusic *music = [ 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)添加:;
2)移除:;
4、重新构造虚拟视频
;



2.4.5配音

1、初始化配音
NSMutableArray *dubbingArr = ;
RDMusic *music = [ init];
;
2、设置配音属性:同配乐
3、将配音添加到播放器中,或者将配音从播放器中移除
1)添加:;
2)移除:;
4、重新构造虚拟视频
;




2.4.6字幕、特效

1、在初始化播放器时设置
_videoCoreSDK.frameLayerBlock = ^(CMTime currentTime, CALayer *layer) {
         ;
    };
2、初始化字幕(特效)
NSMutableArray *effects = ;
RDCaption *caption = [ init];
;

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) CGRecttFrame;

/**文字开始时间
*/
@property (nonatomic ,assign) floattBegin;

/**文字结束时间
*/
@property (nonatomic ,assign) floattEnd;

/**帧动画
*/
@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 = [ initWithCaption:caption videoSize:videoSize];
* videoSize:初始化播放器时,设置的视频分辨率
5、在字幕(特效)的显示范围(timeRange)内,将captionLayer添加到1、中的layer上。
具体参照RDVEUISDK。



2.4.7滤镜

1、添加所有的滤镜
NSMutableArray *globalFilters = ;
1)初始化滤镜
RDFilter* filter = ;
;
2)设置滤镜属性
/**滤镜类型
*/
@property (nonatomic,assign)NSInteger type;

/**滤镜名称
*/
@property (nonatomic,copy)NSString *name;

/**滤镜acv地址
*/
@property (nonatomic,copy)NSString *acvPath;
3)添加所有滤镜
;
2、设置滤镜
;



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.delegate = nil;
_videoCoreSDK = nil;




2.5录制视频

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



2.5.2录制前设置录制相关参数

/** 录制之前准备,用于设置录制相关参数。
*@paramframe       录制预览视图位置大小
*@paramsuperview   源视图控制器
*@parambitrate   录制码率
*@paramfps         录制帧率
*@parammode      录制视频方式:YES:正方形   NO:全屏
*@paramsize      录制视频分辨率
*@paramisFront   是否是前置摄像头录制
*@paramfaceU       是否使用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;



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



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


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


2.5.7滤镜

/** 添加滤镜组
*/
- (void) addFilters:(NSArray <RDFilter *> *) filters;

/** 设置滤镜
*/
- (void) setFilterAtIndex:(NSInteger ) index;

/** 移除滤镜组
*/
- (void) removeFilters;


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


2.5.9获取带滤镜效果的截图

/** 获取带滤镜的缩略图
*/
+(void) returnImageWith:(UIImage *)inputImage
               Filter:(RDFilter *)obj
withCompletionHandler:(void (^)(UIImage *processedImage))block;



2.5.10录制完成后释放

    ;
    ;
    _cameraManager.delegate = nil;
    _cameraManager = nil;








页: [1]
查看完整版本: RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版