博客> ios视频编辑SDK-RDVECore来自锐动的无UI,高度抽象化API
ios视频编辑SDK-RDVECore来自锐动的无UI,高度抽象化API
2017-11-24 21:56 评论:0 阅读:321 xianggudouya
ios sdk 视频编辑

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架构图:  图片1.png

RDVECore简要流程图:  图片2.png

2.1 运行环境

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

2.2注册申请AppKey和APPSecret 2.2.1 打开 www.rdsdk.com/ ,在锐动官网首页选择登 录或注册,新用户先注册,老用户直接登录。 
 2.2.2 登录完成后,进入视频云管理 点击“+新增”,填写您应 用的名称等,点击“提交”,应用创建完成。 
 2.2.3 创建应用完成后会自动跳转至个人中心页面,此时会获 取到该应用的 AppKey 和 AppSecret。 


2.3下载并导入SDK

2.3.1 添加静态库libRDVECore.a和头文件  图片3.png

2.3.2 添加RDVECore.bundle  图片4.png

2.3.3 工程设置 TARGETS的Deployment Info仅勾选竖屏(Portrait),横屏(LandscapeLeft、LandscapeRight)不勾选:  图片5.png

IOS10适配 在 Info.plist 中 添 加 NSCameraUsageDescription 、 NSMicrophoneUsageDescription、NSPhotoLibraryUsageDescription。  图片6.png

添加引用苹果官方库  图片7.png

如果录制时使用faceU,还需要引用库Accelerate.framework  图片8.png

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

2.4编辑视频

2.4.1引入头文件及初始化

import "RDVECore.h"

/* 初始化对象

@param appkey 在锐动SDK官网(www.rdsdk.com/ )中注册的应用Key。 @param appsecret 在锐动SDK官网(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; 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.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];

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官网(www.rdsdk.com/ )中注册的应用Key。 @param appsecret 在锐动SDK官网(www.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; 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 ) filters; / 设置滤镜 /

(void) setFilterAtIndex:(NSInteger ) index; /* 移除滤镜组 /

(void) removeFilters; 2.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 倒序进度回调 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 stopCamera]; [_cameraManager deleteItems]; _cameraManager.delegate = nil; _cameraManager = nil;

收藏
1
sina weixin mail 回到顶部