本帖最后由 雪丽 于 2017-12-12 18:25 编辑
1 RDVECore功能概述 RDVECore是锐动推出的无UI,高度抽象化API的视频编辑SDK,支持以下功能:
1.1 丰富的编辑功能
RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确到毫秒级,达到最专业的的要求,主要功能如下: · MVMV根据配置资源进行混合以及动画,增强短视频效果 · 滤镜 RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。 · 字幕特效 字幕特效支持在指定位置,指定时间段显示;实时预览效果 · 配音、配乐 支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐 · 截取、分割 支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频 · 调速 调整视频的播放速度,快放或者慢放 · 转场 支持多种转场; 支持随机转场、指定转场时长等扩展设置 · 其它编辑功能 支持多种比例裁剪; 支持90、180、270度旋转视频画面; 支持左右镜像、上下镜像; 支持输出比例调整;
1.2 完善的视频拍摄功能
· 实时美颜可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节 · 人脸贴纸/挂件 支持人脸识别及贴纸/挂件显示 · 拍摄自由定义 RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。 多段拍摄 一个视频可以分多段次拍摄 摄像头切换 前、后摄像头自由切换,中间无卡顿 多比例支持 支持1:1 、9:16、16:9多个比例录制 变焦、对焦 通过相应手势可以缩放摄像头采集画面及清晰度(依赖硬件支持) · 滤镜 在拍摄过程中,除实时美颜,同时还可以实时添加滤镜效果,RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,用户还可以根据自己的需求进行滤镜扩展。 · 照片 当前摄像头画面保存到图片
RDVECore架构图:
RDVECore简要流程图:
2 集成步骤
2.1 运行环境
l Android 4.3(api 18)以上; l 处理器:双核 1GHz以上CPU(目前只支持ARM CPU, X86、MIPS暂不支持); 推荐四核1.2GHz以上CPU l 内存:1 GB以上;
2.2 注册申请AppKey和APPSECRET
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库: · armeabi-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.onPrepare(parentLayout, IRecorderCallBackShot listener); 一般用在Activity.onStart()中
2.4.3 关于录制结束时的释放清理操作
用于响应Activity.onDestroy() RecorderCore.onExit(this);
2.4.4 录制
//开始录制 RecorderCore.startRecord(localSaveMp4File); //结束录制 RecorderCore.stopRecord(); //是否正在录制... RecorderCore.isRecording();
2.4.5 关于回调接口
/* * 打开摄像头成功并且开始预览界面 * @param result * 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败 * @param resultInfo * 具体返回消息 */ IRecorderCallBackShot.onPrepared(int result, String resultInfo); /* * 响应录制开始 * @param result * 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败 * @param resultInfo * 具体返回消息 */ IRecorderCallBackShot.onRecordBegin(int result, String resultInfo); /* * 响应获取已录制信息 * @param position 已录制时间 (ms) * @param recordFPS 录制帧率 * @param delayed 延迟时间 */ IRecorderCallBackShot.onGetRecordStatus(int position, int recordFPS, int delayed); /** * 响应直播结束 * @param result * 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败 * @param resultInfo */ IRecorderCallBackShot.onRecordEnd(int result, String resultInfo); /** * 录制出现错误 * @param result * 返回值 * @param resultInfo * 具体返回消息 */ IRecorderCallBackShot.onRecordFailed(int result, String resultInfo); /** * 响应摄像头打开信息 * @param nResult * 返回值 >={@link ResultConstants#SUCCESS} 代表成功,否则为失败 * @param strResultInfo * 具体返回消息 */ IRecorderCallBackShot.onCamera(int result, String resultInfo);
/**
* 保存当前画面回调
* @param nResult =ResultConstants.SUCCESS
* @param picturePath图片本地路径
*/ IRecorderCallBackShot.onScreenShot(int result,String picturePath);
2.4.6 摄像头相关(必须在onprepare回调之后才有效)
//聚焦 RecorderCore.cameraAutoFocus(); // 是否为前摄像像头 RecorderCore.isFaceFront(); // 切换摄像头 RecorderCore.switchCamera();
2.4.7 闪光灯(必须在onprepare回调之后才有效)
//获取闪光灯状态 RecorderCore.getFlashMode(); //打开闪光灯 RecorderCore.setFlashMode(boolean enable);
2.4.8 美颜
//是否支持美颜 RecorderCore.isBeautifyEnabled(); //打开或关闭美颜
RecorderCore.enableBeautify(boolean enableBeautify);
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 播放器对象
|