- 浏览: 8329 次
- 性别:
最新评论
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.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和头文件
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官网(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;
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.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和头文件
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官网(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;
发表评论
-
锐动SDK针对游戏直播提出的解决方案
2019-03-15 17:37 7方案架构 PC端视频直播与录播功能为游戏厂商宣 ... -
短视频SDK超级简单易用
2018-10-17 15:26 520超级简单易用的短视频SDK来自RDSDK.COM。锐动天地为 ... -
iOS/Android 视频编辑SDK
2018-08-03 10:36 1043锐动天地为开发者提供短视频编辑、视频直播、特效、录屏、 ... -
锐动SDK应用于行车记录仪
2018-07-10 18:13 986方案架构 手机端直播与录播功能忠实记录 ... -
Android视频编辑SDK--RDVECore来自锐动的无UI,高度抽象化API
2017-11-27 16:08 5111 RDVECore功能概述 RDVECore是锐动推出的无 ...
相关推荐
Dart SDK是Google开发的一种编程语言Dart的软件开发工具包,用于构建高性能的现代Web和移动应用程序。在本文中,我们将深入探讨Dart SDK、其重要性以及如何在Windows操作系统上安装和使用2.8.0版本。 首先,Dart是...
这些类库提供了许多原生SDK未涵盖的功能,例如数据持久化、网络请求、UI组件、动画效果等。以下是一些iOS开发中常用的第三方类库,以及它们的主要功能和应用场景。 1. **数据库操作** - **CoreData**: 虽然是苹果...
- **MVVM**(Model-View-ViewModel):将模型和视图之间的通信抽象化,简化了视图和模型之间的耦合。 - **MVP**(Model-View-Presenter):与MVC类似,但在视图和模型之间添加了一个呈现者层。 - **VIPER**(View-...
Weex采用组件化思想,将UI界面抽象为可复用的组件,通过JSON格式描述界面结构,然后在客户端渲染。JavaScript层负责逻辑处理和数据绑定,而原生层则负责高性能的渲染和系统交互。 2. **Weex与Android Native方法...
- **Interface Builder**:一个可视化的用户界面构建工具,可以用来创建应用程序的 UI 元素,并在运行时加载到应用中。 - **Instruments**:一个强大的运行时性能分析和调试工具,可以帮助开发者收集应用行为信息...
在Android开发中,为了提供与iOS相似的用户体验,开发者经常会选择仿照iOS的界面风格来设计应用程序。"仿IOS的PreferenceActivity界面"就是一个这样的实践,它主要涉及到Android的Preference类和Activity的使用,...
uniapp的核心在于其强大的兼容性和高度的抽象封装,使得开发者可以高效地实现跨平台开发。 WeUI是微信官方设计团队为微信Web服务量身定制的一套基础样式库,遵循微信原生视觉风格,主要用于微信小程序的开发。它...
在iOS开发领域,一名合格的工程师需要掌握一系列的技能,这张“iOS开发工程师技能图谱”正是为了指导学习者构建全面的技术栈而设计的。它分为开发基础、开发进阶、设计模式、开源项目、APP上传与审核以及第三方服务...
【Dart_v2.4.0.zip】是一个包含Dart SDK的压缩文件,版本为2.4.0。Dart是一种由Google开发的面向对象、类定义的编程语言,设计用于构建高性能的Web、移动和服务器应用程序。在这个压缩包中,用户可以获得Dart SDK的...
1. **获取支付宝SDK**: 从支付宝开放平台下载适用于Xamarin的SDK,如`XamarinFormsAlipaySDKSample-master`所示,这包含了Android和iOS平台的SDK文件。 2. **配置项目**: 在Xamarin.Forms项目中添加SDK引用,同时为...
- 构造函数用于初始化新创建的对象。 - 构造函数的名称必须与类名相同,没有返回类型。 - 如果类中未显式定义构造函数,则默认提供一个无参构造函数。 - **接口的使用和特点** - 接口是一组抽象方法的集合,...
React Native 是一个由Facebook开发的开源框架,它允许开发者使用JavaScript和React库来构建原生的iOS和Android应用。在本项目"V2EX的一个ReactNativeAndroid客户端"中,我们看到的是一个基于React Native实现的V2EX...
在iOS开发中,UIActivity是苹果提供的一种框架,用于实现分享功能。用户可以通过它将内容分享到各种不同的服务,如社交媒体、邮件、消息等。`WeixinActivity.zip`中的项目`WeixinActivity`是一个专门为iOS 6设计的...
对于QQ、微信和微博这三大中国主流社交平台,开发者通常需要分别处理各自的SDK和API,而`BQLAuthEngine`通过抽象和封装,使得这一过程变得统一且简单。它允许用户通过单一的接口来实现多平台的登录认证,同时支持...
6. **SDK 和文档**: 压缩包中可能还包括 RemObjects Elements 的开发工具包(SDK)和详细的文档,以帮助开发者理解和使用这些组件,包括示例代码、API 文档和教程。 在使用 RemObjects Elements 开发时,开发者可以...
随着Swift的崛起和Apple官方SDK的不断更新,Three20的一些功能已被原生API所取代。此外,由于维护上的挑战,Three20项目在2015年左右停止了主要的开发工作。然而,对于学习Objective-C的开发者来说,理解Three20的...
dhtmlxTouch就是这样一种工具,它允许开发者使用纯前端技术构建强大的移动应用,而无需依赖原生平台的SDK或学习新的编程语言。 **JavaScript框架**如dhtmlxTouch的核心特性包括组件库、触摸事件处理、数据绑定和...
V2EX API通常返回JSON格式的数据,因此开发者需要使用`json_serializable`库进行序列化和反序列化,以便在 Dart 对象间转换数据。 对于数据存储,Flutter提供了多种解决方案,如`shared_preferences`用于轻量级的...
- Dart支持面向对象编程,具有类、接口、继承和抽象方法等特性。 - 强类型语言,但提供了动态类型的dart:mirrors库,用于运行时反射。 - Dart有强大的错误处理机制,包括try-catch-finally和assert语句。 2. **...
- **iOS Swift/Android Java/Kotlin**:对于移动应用,可以在原生平台使用Swift或Kotlin的UI组件进行定制,或者使用跨平台框架如React Native或Flutter。 - **C#/.NET**:对于桌面或服务器端应用,可以利用WPF或...