美文网首页
RDVECore来自锐动的无UI,高度抽象化API的视频编辑SD

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

作者: 藤姚 | 来源:发表于2017-09-14 10:10 被阅读0次

    1编写目的

    预期读者:

    有视频编辑开发经验或者无经验的,打算或者正在使用“锐动IOS版RDVECore”的相关工程师。

    iOS软件工程师。

    产品经理。

    QA

    2名词解释

    分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率。常见视频分辨率的有1080P即1920x1080,720P即1080x720,640x480等。

    帧率:每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。

    码率: 数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。

    宽高比:视频分辨率的宽高比,常见的有16:9,4:3,1:1。锐动视频编辑SDK对各宽高比的视频都支持编辑,导出的默认分辨率是640x360,宽高比是16:9。

    素材:来自系统相机,其他app,电脑,网络的照片,音乐,视频等。

    虚拟视频(VirtualVideo): 管理编辑中的包含场景、字幕水印等,用于预览或导出时的容器或管理者。

    场景(Scene):包含编辑中的媒体对象。

    视频变速:对视频播放速度调整,实现慢镜头或者快镜头效果。

    视频配乐:选取本地或者网络音乐作为视频的背景音乐。

    视频配音:通过mic phone对视频配音。

    视频滤镜:调整视频的画面颜色效果。

    滤镜特效:在视频里面增加颤抖,心跳等效果

    时间特效:在视频里面增加慢动作,重复等效果

    3RDVECore功能概述

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

    3.1丰富的编辑功能

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

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

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

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

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

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

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

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

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

    3.2完善的视频拍摄功能

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

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

    ·拍摄自由定义

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

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

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

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

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

    ·滤镜

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

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

    RDVECore架构图:

    RDVECore简要流程图:

    4XCode集成步骤

    4.1运行环境

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

    4.2注册申请AppKey和APPSecret

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

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

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

    4.3下载并导入SDK

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

    4.3.2添加RDVECore.bundle

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

    4.4编辑视频

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

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

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

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

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

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

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

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

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

    4.4.10获取缩略图

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

    */

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

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

    4.4.12编辑完成后释放

    [_videoCoreSDK stop];

    _videoCoreSDK.delegate = nil;

    _videoCoreSDK = nil;

    4.5录制视频

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

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

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

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

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

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

    4.5.7滤镜

    /** 添加滤镜组

    */

    - (void) addFilters:(NSArray *) filters;

    /** 设置滤镜

    */

    - (void) setFilterAtIndex:(NSInteger ) index;

    /** 移除滤镜组

    */

    - (void) removeFilters;

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

    4.5.9获取带滤镜效果的截图

    /** 获取带滤镜的缩略图

    */

    +(void) returnImageWith:(UIImage *)inputImage

    Filter:(RDFilter *)obj

    withCompletionHandler:(void (^)(UIImage *processedImage))block;

    4.5.10录制完成后释放

    [_cameraManager stopCamera];

    [_cameraManager deleteItems];

    _cameraManager.delegate = nil;

    _cameraManager = nil;

    相关文章

      网友评论

          本文标题:RDVECore来自锐动的无UI,高度抽象化API的视频编辑SD

          本文链接:https://www.haomeiwen.com/subject/nairsxtx.html