开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8126|回复: 1
收起左侧

[开源实例] RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版

[复制链接]
发表于 2017-12-27 17:42:57 | 显示全部楼层 |阅读模式   重庆市重庆市
1 RDVECore功能概述
RDVECore是锐动推出的无UI,高度抽象化API的视频编辑SDK,支持以下功能:
1.1 丰富的编辑功能
RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种
处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确
到毫秒级,达到最专业的的要求,主要功能如下:
l MV MV根据配置资源进行混合以及动画,增强短视频效果
l 滤镜 RDVEUISDK本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。
l 字幕特效 字幕特效支持在指定位置,指定时间段显示;实时预览效果
l 配音、配乐 支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐
l 截取、分割 支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频
l 调速 调整视频的播放速度,快放或者慢放
l 转场 支持多种转场; 支持随机转场、指定转场时长等扩展设置
l 其它编辑功能 支持多种比例裁剪; 支持90、180、270度旋转视频画面; 支持左右镜像、上下镜像; 支持输出比例调整;
1.2 完善的视频拍摄功能
· 实时美颜 可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节
· 人脸贴纸/挂件 支持人脸识别及贴纸/挂件显示
· 拍摄自由定义 RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。
多段拍摄 一个视频可以分多段次拍摄
摄像头切换 前、后摄像头自由切换,中间无卡顿
多比例支持 支持1:1 9:1616:9多个比例录制
变焦、对焦 通过相应手势可以缩放摄像头采集画面及清晰度
· 滤镜
在拍摄过程中,除了实时美颜,同时还可以实时添加滤镜效果,RDVEUISDK本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。
· 照片 当前摄像头画面保存到图片
RDVECore架构图:
RDVECore简要流程图:
2 XCode集成步骤2.1 运行环境
SDK支持iOS7.0及以上版本的设备,兼容iPhoneiPadiPod touch
2.2 注册申请AppKeyAPPSecret2.2.1 打开 http://www.rdsdk.com/ ,在锐动官网首页选择登 录或注册,新用户先注册,老用户直接登录。 
2.2.2 登录完成后,进入视频云管理 点击“+新增,填写您应 用的名称等,点击提交,应用创建完成。 
2.2.3 创建应用完成后会自动跳转至个人中心页面,此时会获 取到该应用的 AppKey AppSecret 
2.3 下载并导入SDK2.3.1 添加静态库libRDVECore.a和头文件
2.3.2 添加RDVECore.bundle
2.3.3 工程设置
l TARGETSDeployment Info勾选竖屏(Portrait)(LandscapeLeftLandscapeRight)不勾选:
l IOS10适配
Info.plist NSCameraUsageDescription
NSMicrophoneUsageDescriptionNSPhotoLibraryUsageDescription
l 添加引用苹果官方
如果录制时使用faceU,还需要引用库Accelerate.framework
l 设置 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/ )中注册的应用秘钥。
*  @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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2017-12-27 17:46:05 | 显示全部楼层   重庆市重庆市
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官网(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 录制前设置录制相关参数
/** 录制之前准备,用于设置录制相关参数。

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

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 stopCamera];

    [_cameraManager deleteItems];

    _cameraManager.delegate = nil;

    _cameraManager = nil;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表