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

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

1.1 
丰富的编辑功能
RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种
处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确
到毫秒级,达到最专业的的要求,主要功能如下:
·  MV  MV根据配置资源进行混合以及动画,增强短视频效果
·  滤镜 RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。
·  字幕特效 字幕特效支持在指定位置,指定时间段显示;实时预览效果
·  配音、配乐 支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐
·  截取、分割 支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频
·  调速 调整视频的播放速度,快放或者慢放
·  转场 支持多种转场; 支持随机转场、指定转场时长等扩展设置
·  其它编辑功能 支持多种比例裁剪; 支持90、180、270 度旋转视频画面;  支持左右镜像、上下镜像;  支持输出比例调整;

1.2 
完善的视频拍摄功能
·  实时美颜  可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节
·  人脸贴纸/挂件
         支持人脸识别及贴纸/挂件显示
·  拍摄自由定义 RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。
多段拍摄 一个视频可以分多段次拍摄
摄像头切换 前、后摄像头自由切换,中间无卡顿
多比例支持 支持1:1 、9:16、16:9多个比例录制
变焦、对焦 通过相应手势可以缩放摄像头采集画面及清晰度(依赖硬件支持)
·  滤镜
在拍摄过程中,除了实时美颜,同时还可以实时添加滤镜效果,RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。
·  照片 当前摄像头画面保存到图片
RDVERDVECore 架构图:



RDVECore 简要流程图:




集成步骤
2.1 运行环境
l Android 4.3 api 18 )以上;
处理器: 双核 1GHz 以上 CPU( 目前只支持 ARM CPU, X86 MIPS 暂不支持 ) 推荐四核1.2GHz 以上 CPU
内存:1 GB以上;

2.2 注册申请AppKeyAPPSECRET

1、 登录 http://www.rdsdk.com 注册用户
2、 登录注册好的用户
3、 进入视频云管理  点击(新增)获取应用的 appkey 、appsecret

2.3 
下载并导入SDK
2.3.1 Android Studio 导入rdVECore模块
点击File--->Import Module ,选择路径,填写“ Module name ”,默认为rdVECore ,点击finish




之后点击 File--->Project Structure ,选择你自己工程的 Module ,在 Flavors 选项卡中设置 Min Sdk Version  不低于 18


然后切换到 Dependencies 选项卡并点击右侧“ + ”号在弹出的下拉菜单选择 Module Dependency 点击。



弹出的小窗口中选择SDK相关的Modules,OK



添加成功后点击 Project Structure设置界面的“ OK ”完成导入工作。




关于集成NDK SO库引发冲突解决办法如下:
步骤一:sdk library 模块过滤



步骤二:application 模块中过滤
编辑SDK NDK包含 以下 架构的SO库:
· armea bi-v7a
建议在Module的build.gradle文件中使用NDK的“abiFilter”配置,设置支持的SO库架构。
如果在添加 “abiFilter” 之后Android Studio出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
则在项目根目录的 gradle.properties 文件中添加:
android.useDeprecatedNdk=true
在集成NDK SO库时,请注意只保留支持的架构SO库 参考截图配置



关于gradle插件
gradle 插件请使用版本 2.3.x
可参考demo 中使用的版本




2.3.2 准备AndroidManifest.xml  (权限)
添加权限:



2.3.3 调用初始化API
RdVECore.initialize(context, rootPath, appKey, appSecret, debuggable);
Parameters:
context  应用上下文
rootPath 自定义的工作目录
appkey  在平台申请的Appkey
appScrect  在平台申请的appScrect
debuggable是否调试
初始化成功后才能正常使用其他功能接口, 还要注意系统权限的申请,否则 SDK 在系统 api 级别  >= 23 android 6.0+ )下不能正常使用




2.4 录制视频
2.4.1 录制初始化参数
//  画面打开之前配置录制 参数( 可包含摄像头、输出尺寸、帧码率、是否美颜等 )
//  通过此方法设置摄像头方向、是否美颜只在onPrepare(RelativeLayout,listener) 之前调用有效
//初始化之后设置前后置方向使用
RecorderCore.switchCamera()、RecorderCore.enableBeautify(bEnableBeautify)
RecorderConfig config = new RecorderConfig()
.setVideoSize(width, height) // 设置录制视频输出宽高
.setVideoFrameRate(frameRate) // 设置录制视频帧率
.setVideoBitrate(bitrate) // 设置录制视频码率
.setEnableFront(isFrontCamera) // 设置录制视频码率
.setEnableBeautify(canBeautiy) // 设置是否启用美颜
.setBeauitifyLevel(level) // 设置美颜级别
.setEnableFrontMirror(enableFrontMirror) // 设置录制时是否镜像
.setEnableAutoFocus(true) // 设置是否自动对焦
.setEnableAutoFocusRecording(false)// 设置录制时是否自动对焦
//设置音频编码参数{numChannels - 声音数sampleRate - 采样率bitRate - 码率(bps)}
. setAudioEncodingParameters(numChannels, sampleRate, bitRate) ;
RecorderCore.setEncoderConfig(config); // 设置配置

2.4.2 初始化录制界面
/**
* 准备录制
*
@param parentLayout
*            用于显示摄像头的父布局
@param listener
*            录制回调消息Listener
*/
RecorderCore.onPrep are(parentLayout,  IRecorderCallBackShot  listener);
一般用在Activity.onStart()

2.4.3 关于录制结束时的释放清理操作
用于响应Activity. onDestroy ()
   RecorderCore.onEx it ( this );

2.4.4 录制
// 开始录制   
RecorderCore.startRecord(localSaveMp4File);
// 结束录制
RecorderCore.stopRecord();
// 是否正在录制 ...
RecorderCore.isRecording();

2.4.5 关于回调接口
/*
打开摄像头成功并且开始预览界面
* @param result
*             返回值  >={@link ResultConstants#SUCCESS}  代表成功,否则为失败
* @param resultInfo
*             具体返回消息
*/
IRecorderCallBackShot . onPrepared(int  r esult, String  r esultInfo);
/*
响应录制开始
* @param result
*             返回值  >={@link ResultConstants#SUCCESS}  代表成功,否则为失败
* @param resultInfo
*             具体返回消息
*/
IRecorderCallBackShot . onRecordBegin(int  r esult, String  r esultInfo) ;
/*
* 响应获取已录制信息
@param position 已录制时间 ( ms)
@param recordFPS 录制帧率
@param delayed 延迟时间
*/
IRecorderCallBackShot . onGetRecordStatus(int  p osition, int  r ecordFPS, int delayed) ;
/**
* 响应直播结束
@param result
*            返回值 >={@link ResultConstants#SUCCESS}  代表成功,否则为失败
@param resultInfo
*/
IRecorderCallBackShot . onRecordEnd(int  r esult, String  r esultInfo) ;
/**
* 录制出现错误
@param result
*            返回值
@param resultInfo
*            具体返回消息
*/
IRecorderCallBackShot . onRecordFailed(int  r esult, String  r esultInfo) ;
        /**
         * 响应摄像头打开信息
         *  @param nResult
         *            返回值 >={@link ResultConstants#SUCCESS}  代表成功,否则为失败
         *  @param strResultInfo
         *            具体返回消息
         */
IRecorderCallBackShot . onCam era( int   r esult, String  r esultInfo) ;
/**
* 保存当前画面回调
* @param nResult =ResultConstants.SUCCESS
* @param picturePath图片本地路径
*/
IRecorderCallBackShot . onScreenSho t(int result,String picturePath);

2.4.6 
摄像头相关(必须在onprepare回调之后才有效)
// 聚焦
RecorderCore.cameraAutoFocus();
//  是否为前摄像像头
RecorderCore.isFaceFront() ;
//  切换摄像头
RecorderCore . swit chCamera ();

2.4.7 闪光灯(必须在onprepare回调之后才有效)
// 获取闪光灯状态
RecorderCore.getFlashMode();
// 打开闪光灯
RecorderCore.setFlashMode(boolean enable);

2.4.8 
美颜
// 是否支持美颜
RecorderCore.isBeautifyEnabled() ;
// 打开或关闭美颜
RecorderCore.enableBeautify(boolean  e nableBeautify);

2.4.9 截图 (必须在listener.onPrepared回调之后才有效)
/**
当前画面截图
* @param isFocus  是否聚焦
* @param path 截图文件路径
* @param width 截图宽度
* @param height 截图高度
*/
RecorderCore.screenshot(isFocus,path, 360, 640, 50);
/**
响应保存截图
* @param nResult
*             返回值  =={@link ResultConstants#SUCCESS}  代表成功,否则为失败
* @param msg
*
*/
IRecorderCallBackShot.onScreenShot(int nResult, String path);

2.4.10 静音
RecorderCore.setMute(isMute);

2.4.11 
滤镜
// 获取支持的滤镜 在 listener.onprepared()  回调成功之后才能获取支持的滤镜
effects = RecorderCore.getSupportedColorEffects();
// 设置滤镜
RecorderCore.setColorEffect(color);

2.4.12 
水印相关
// 判断水印是否注册
RecorderCore.isOsded();
// 开启水印
RecorderCore.registerOSD(osd);
// 关闭水印
RecorderCore.registerOSD(null);
public class CameraWatermarkBuilder extends VEOSDBuilder{
     // 设置水印位置
     setOSDGravity(int nGravity);
     // 刷新水印内容
     protected void onRefreshOSDView(View vOSD) {}
}

2.4.13 水印相关横竖屏录制
说明: 输出视频的录制方向,内部通过获取屏幕方向得到
// 开始直播录制
第一步:锁定屏幕当前的方向( 固定输出方向 )



第二步: 录制前通过设置屏幕方向的旋转角度 ( 获取当前屏幕的方向 0 90 180 270 )  辨别是否横屏录制。
RecorderCore.setOrientation(nOrientation);


2.4.14 混音播放器



(只支持播放本地音乐,支持的音频格式mp3、mp2、  aac   wma   wmv  ac3、  ogg )
此播放器支持混音功能. 场景 : 插上耳机,传输一路音频流到看直播端
player.setOnPreparedListener(listener);
player.setOnInfoListener(infolistener);
player.setOnCompletionListener(completlistener);
player.setOnErrorListener(onErrorListener);
player.prepareAsync();

2.4.15 是否开启混音功能
// 设置是否开启混音
RecorderCore.enableMixAudio(enable);
// 获取当前是否开启混音
RecorderCore.isEnableMixAudio();

2.4.16 设置混音占比
// 设置混音占比 0-100
RecorderCore.setMixFactor(factor);
// 获取当前混音占比
RecorderCore.getMixFactor();



2.5 编辑视频 2.5.1 添加播放器
布局里面添加播放器

代码里面用
@BindView(R2.id.epv_player)
VirtualVideoView mVideoPlayer;
或者
VirtualVideoView mVideoPlayer;
mVideoPlayer = (VirtualVideoView) findViewById(R.id.epv_player);
获取mVideoPlayer  播放器对象

2.5.2 构造虚拟视频并添加到播放器
// 构造虚拟视频
VirtualVideo mVirtualVideo
mVirtualVideo = new VirtualVideo();
// 构造一个场景
Scene scene = VirtualVideo.createScene();
// 给场景添加媒体(传媒体路径)并返回媒体对象
MediaObject mediaObject = scene.addMedia(mediaPath);
// 将场景添加到虚拟视频
mVirtualVideo.addScene(scene);
// 将虚拟视频添加到播放器
try {
    mVirtualVideo.build(mVideoPlayer);
} catch (InvalidStateException e) {
}

2.5.3 获取视频缩略图
方式1:虚拟视频对象获取缩略图
虚拟视频添加场景后调用build(Context context) 函数加载所有媒体,
如:
try {
    mVirtualVideo.build(mContext);
} catch (InvalidStateException e) {
    e.printStackTrace();
}
再调用boolean getSnapShot(float timeSecond,Bitmap snapshot) 即可获取对应时间点的缩略图
其中参数timeSecond 为缩略图时间点(单位秒), snapshot 为获取缩略图的 Bitmap 对象
返回值为true 表示获取成功, false 为失败
如:
mVirtualVideo.getSnapshot(1, bitmap);
获取1 秒位置的缩略图,并把图片绘入 bitmap
方式2:通过文件获取缩略图
VirtualVideo.getSnapShot(
String mediaPath,   //  媒体地址
float timeSecond,   //  缩略图时间点 ( 单位秒 )
Bitmap snapShot,   //  位图对象
boolean isFastSeek) //  是否为快速定位


2.5.4 添加滤镜特效
// 在虚拟视频对象添加滤镜特效
mVirtualVideo.addEffect(
EffectType,  // 特效类型
startTime,   // 开始位置(单位秒)
endTime,    // 结束位置(单位秒)
arg);        // 其他参数(例如倒序需要传一个倒序视频路径)
// 添加完成后更新特效
mVirtualVideo.updateEffects(videoView);


2.5.5 
添加音乐
// 在虚拟视频添加音乐
方式一:
/**
添加音乐资源
*
* @param musicPath      音乐路径
* @param trimStart      音乐截取开始位置(单位秒)
* @param trimEnd        音乐截取结束位置(单位秒)
* @param timelineStart  音乐在主时间线的开始位置(单位秒)
* @param timelineEnd    音乐在主时间线的结束位置(单位秒)
* @param mixFactor      音量占用比例(正常范围 0-100, 超过 100 代表音量增益,过大会破音 , 比如设置 20 代表原音量的 20% 500 则为原音量增益 5 倍)
* @param speed          音乐速度
* @param original       是否为原音
* @return
* @throws InvalidArgumentException
*/
public VirtualVideo addMusic(String musicPath, float trimStart, float trimEnd, float timelineStart, float timelineEnd, int mixFactor, float speed, boolean original) throws InvalidArgumentException

// 清除音乐
mVirtualVideo.clearMusic();
// 造作完成后刷新音乐
mVirtualVideo.updateMusic(videoView);
// 设置配乐音量占用比例(音量占用比例(正常范围 0-100, 超过 100 代表音量增益,过大会破音 , 比如设置 20 代表原音量的 20% 500 则为原音量增益 5 倍,实时更改,不用调 updateMusic
mVirtualVideo.setMusicMixFactor(musicMixFactor);


2.5.6 
添加水印
/**
添加水印
*
* @param watermark  水印对象
*/
public VirtualVideo addWatermark(Watermark watermark)
其中Watermark 对象
// 创建一个水印对象
Watermark watermark = new Watermark();
// 设置水平路径(图片路径)
watermark.setPath(watermarkPath);
// 设置水印显示区域( RectF  其中上下左右用 0-1
watermark.setShowRect(watermarkShowRectF);
// 设置开始时间(单位秒)
watermark.setStartTime(startTIme);
// 设置结束时间 (单位秒)
watermark.setEndTime(endTime);


2.5.7 
视频倒序
/**
视频倒序
*
* @param context           上下文
* @param mediaObject       媒体对象
* @param reverseVideoPath  倒序保存路径
* @param vc                配置类
* @param listener          倒序回调
*/
public static void ExportUtils.reverseSave(Context context, MediaObject mediaObject, String
reverseVideoPath, VideoConfig vc, final ExportListener listener)
/**
快速倒序(原视频必须每帧都为关键帧)
*
* @param context           上下文
* @param mediaObject       媒体对象
* @param reverseVideoPath  倒序保存路径
* @param listener          倒序回调
*/
public static void ExportUtils.fastReverseSave(Context context,MediaObject mediaObject, String
reverseVideoPath, final ExportListener listener)


2.5.8 
MV
第一步:注册MV ,得到 MVId
MVInfo temp = RdVECore.registerMV(localPath);
第二步:设置MV
if (null != mMVFragment) {
    mVirtualVideo.setMV(mMVFragment.getCurrentMVId());
}
// 是否移除 MV 中的声音 ( 切换配乐时可以移除声音,防止两种声音吵杂 )
mVirtualVideo.removeMVMusic(bRemoveMVMusic);


2.5.9 
完成编辑导出视频
/**
导出视频
* @param context      上下文
* @param filePath     保存路径
* @param videoConfig  导出配置
* @param listener     导出回调
*/
public VirtualVideo export(Context context, String filePath, VideoConfig videoConfig,
ExportListener listener)
其中 ExportListener  为导出 Listener
public interface ExportListener {
    /**
     *  导出开始回调
     */
    void onExportStart();
    /**
     *  导出进度回调
     *
     * @param progress  当前进度
     * @param max       最大进度
     * @return  返回是否继续执行, false 为终止导出
     */
    boolean onExporting(int progress, int max);
    /**
     *  导出结束回调
     *
     * @param result  结束返回 int
     */
    void onExportEnd(int result);
}
导出配置VideoConfig 说明如下:
/**
设置视频分辨率
如果设置此项,则宽高比将无效
*
* @param width   视频宽度
* @param height  视频高度
*/
public VideoConfig setVideoSize(int width, int height)
/**
设置视频帧率
*
* @param frameRate  帧率
*/
public VideoConfig setVideoFrameRate(int frameRate)
/**
设置码率
*
* @param bitRate  码率 (bps)
*/
public VideoConfig setVideoEncodingBitRate(int bitRate)
/**
设置关键帧间隔
*
* @param interval  关键帧间隔(秒为单位)
*/
public VideoConfig setKeyFrameTime(int interval)
/**
设置音频编码参数
*
* @param numChannels  声音数
* @param sampleRate   采样率
* @param bitRate      码率 (bps)
*/
public void setAudioEncodingParameters(int numChannels, int sampleRate, int bitRate)
/**
设置输出文件是否需要针对网络优化
*
* @param optimizeForNet  输出文件是否需要针对网络优化
*/
public VideoConfig setOptimizeForNet(boolean optimizeForNet)
/**
设置是否使用硬件编码
*
* @param enable  ture 使用硬件编码
*/
public VideoConfig enableHWEncoder(boolean enable)
/**
设置是否使用硬件解码
*
* @param enable  ture 使用硬件解码
*/
public VideoConfig enableHWDecoder(boolean enable)
/**
* 设置音频编码参数
*
@param  numChannels  声音数
@param  sampleRate   采样率
@param  bitRate      码率(bps)
*/
public void setAudioEncodingParameters( int numChannels,  int sampleRate,  int bitRate)


2.6 打包混淆
需要在proguard.cfg 文件中添加如下配置项:
-dontwarn  com.rd.**
-keep class com.rd.** { *; }
# 水印
-keepclassmembers class * extends com.rd.recorder.OSDBuilder{  * ;}



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31444340/viewspace-2154914/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31444340/viewspace-2154914/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值