Android视频编辑SDK--RDVECore来自锐动的无UI,高度抽象化API
1RDVECore功能概述RDVECore是锐动推出的无UI,高度抽象化API的视频编辑SDK,支持以下功能:
1.1丰富的编辑功能RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种
处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确
到毫秒级,达到最专业的的要求,主要功能如下:·MVMV根据配置资源进行混合以及动画,增强短视频效果·滤镜RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。·字幕特效字幕特效支持在指定位置,指定时间段显示;实时预览效果·配音、配乐支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐·截取、分割支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频·调速调整视频的播放速度,快放或者慢放·转场支持多种转场; 支持随机转场、指定转场时长等扩展设置·其它编辑功能支持多种比例裁剪; 支持90、180、270度旋转视频画面;支持左右镜像、上下镜像;支持输出比例调整;
1.2完善的视频拍摄功能·实时美颜可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节·人脸贴纸/挂件 支持人脸识别及贴纸/挂件显示·拍摄自由定义RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。多段拍摄一个视频可以分多段次拍摄摄像头切换前、后摄像头自由切换,中间无卡顿多比例支持支持1:1 、9:16、16:9多个比例录制变焦、对焦通过相应手势可以缩放摄像头采集画面及清晰度(依赖硬件支持)·滤镜在拍摄过程中,除了实时美颜,同时还可以实时添加滤镜效果,RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。·照片当前摄像头画面保存到图片RDVERDVECore架构图:
RDVECore简要流程图:
2集成步骤2.1运行环境l Android 4.3(api 18)以上;l处理器:双核1GHz以上CPU(目前只支持ARM CPU, X86、MIPS暂不支持);推荐四核1.2GHz以上CPUl内存:1 GB以上;
2.2注册申请AppKey和APPSECRET1、 登录http://www.rdsdk.com注册用户2、 登录注册好的用户
3、 进入视频云管理点击(新增)获取应用的appkey 、appsecret
2.3下载并导入SDK
2.3.1Android 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调用初始化APIRdVECore.initialize(context, rootPath, appKey, appSecret, debuggable);Parameters:context应用上下文rootPath自定义的工作目录appkey在平台申请的AppkeyappScrect在平台申请的appScrectdebuggable是否调试初始化成功后才能正常使用其他功能接口,还要注意系统权限的申请,否则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初始化录制界面/*** 准备录制**@paramparentLayout* 用于显示摄像头的父布局*@paramlistener* 录制回调消息Listener*/RecorderCore.onPrepare(parentLayout,IRecorderCallBackShotlistener);一般用在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(intresult, StringresultInfo);/**响应录制开始* @param result* 返回值>={@link ResultConstants#SUCCESS}代表成功,否则为失败* @param resultInfo* 具体返回消息*/IRecorderCallBackShot.onRecordBegin(intresult, StringresultInfo);/** 响应获取已录制信息*@paramposition 已录制时间 (ms)*@paramrecordFPS 录制帧率*@paramdelayed 延迟时间*/IRecorderCallBackShot.onGetRecordStatus(intposition, intrecordFPS, int delayed);/*** 响应直播结束*@paramresult* 返回值 >={@link ResultConstants#SUCCESS}代表成功,否则为失败*@paramresultInfo*/IRecorderCallBackShot.onRecordEnd(intresult, StringresultInfo);/*** 录制出现错误*@paramresult* 返回值*@paramresultInfo* 具体返回消息*/IRecorderCallBackShot.onRecordFailed(intresult, StringresultInfo); /** * 响应摄像头打开信息 *@paramnResult * 返回值 >={@link ResultConstants#SUCCESS}代表成功,否则为失败 *@paramstrResultInfo * 具体返回消息 */IRecorderCallBackShot.onCamera(intresult, StringresultInfo);/**
* 保存当前画面回调
* @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(booleanenableBeautify);
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-100RecorderCore.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 mVirtualVideomVirtualVideo = 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, StringreverseVideoPath, VideoConfig vc, final ExportListener listener)/**
*快速倒序(原视频必须每帧都为关键帧)
*
* @param context 上下文
* @param mediaObject 媒体对象
* @param reverseVideoPath倒序保存路径
* @param listener 倒序回调
*/
public static void ExportUtils.fastReverseSave(Context context,MediaObject mediaObject, StringreverseVideoPath, final ExportListener listener)
2.5.8MV第一步:注册MV,得到MVIdMVInfo temp = RdVECore.registerMV(localPath);第二步:设置MVif (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)/**
* 设置音频编码参数
*
*@paramnumChannels声音数
*@paramsampleRate采样率
*@parambitRate 码率(bps)
*/
public voidsetAudioEncodingParameters(intnumChannels,intsampleRate,intbitRate)
2.6打包混淆需要在proguard.cfg文件中添加如下配置项:-dontwarncom.rd.**-keep class com.rd.** { *; }#水印-keepclassmembers class * extends com.rd.recorder.OSDBuilder{* ;}
1.1丰富的编辑功能RDVECore包含了丰富的基础功能,对于编辑中的视频、图片、音乐有各种
处理方式,并且可以根据实际的业务需求,进行搭配组合,所有处理都可以精确
到毫秒级,达到最专业的的要求,主要功能如下:·MVMV根据配置资源进行混合以及动画,增强短视频效果·滤镜RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。·字幕特效字幕特效支持在指定位置,指定时间段显示;实时预览效果·配音、配乐支持指定时间段添加配音; 支持配音、配乐与视频原音比例调节; 支持本地添加更多配乐·截取、分割支持毫秒级截取、分割视频; 支持快速预览截取、分割后视频·调速调整视频的播放速度,快放或者慢放·转场支持多种转场; 支持随机转场、指定转场时长等扩展设置·其它编辑功能支持多种比例裁剪; 支持90、180、270度旋转视频画面;支持左右镜像、上下镜像;支持输出比例调整;
1.2完善的视频拍摄功能·实时美颜可以在拍摄过程中实时人脸美肤,提亮、美白等效果,达到人脸美化,同时支持美化程度的调节·人脸贴纸/挂件 支持人脸识别及贴纸/挂件显示·拍摄自由定义RDVECore在拍摄过程中,可以根据具体的录制需求,进行自由化的设定,拥有更佳优异的拍摄录制效果。多段拍摄一个视频可以分多段次拍摄摄像头切换前、后摄像头自由切换,中间无卡顿多比例支持支持1:1 、9:16、16:9多个比例录制变焦、对焦通过相应手势可以缩放摄像头采集画面及清晰度(依赖硬件支持)·滤镜在拍摄过程中,除了实时美颜,同时还可以实时添加滤镜效果,RDVEUISdk本身提供丰富的滤镜效果让开发者进行选择,同时用户还可以根据自己的需求进行滤镜扩展。·照片当前摄像头画面保存到图片RDVERDVECore架构图:
RDVECore简要流程图:
2集成步骤2.1运行环境l Android 4.3(api 18)以上;l处理器:双核1GHz以上CPU(目前只支持ARM CPU, X86、MIPS暂不支持);推荐四核1.2GHz以上CPUl内存:1 GB以上;
2.2注册申请AppKey和APPSECRET1、 登录http://www.rdsdk.com注册用户2、 登录注册好的用户
3、 进入视频云管理点击(新增)获取应用的appkey 、appsecret
2.3下载并导入SDK
2.3.1Android 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调用初始化APIRdVECore.initialize(context, rootPath, appKey, appSecret, debuggable);Parameters:context应用上下文rootPath自定义的工作目录appkey在平台申请的AppkeyappScrect在平台申请的appScrectdebuggable是否调试初始化成功后才能正常使用其他功能接口,还要注意系统权限的申请,否则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初始化录制界面/*** 准备录制**@paramparentLayout* 用于显示摄像头的父布局*@paramlistener* 录制回调消息Listener*/RecorderCore.onPrepare(parentLayout,IRecorderCallBackShotlistener);一般用在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(intresult, StringresultInfo);/**响应录制开始* @param result* 返回值>={@link ResultConstants#SUCCESS}代表成功,否则为失败* @param resultInfo* 具体返回消息*/IRecorderCallBackShot.onRecordBegin(intresult, StringresultInfo);/** 响应获取已录制信息*@paramposition 已录制时间 (ms)*@paramrecordFPS 录制帧率*@paramdelayed 延迟时间*/IRecorderCallBackShot.onGetRecordStatus(intposition, intrecordFPS, int delayed);/*** 响应直播结束*@paramresult* 返回值 >={@link ResultConstants#SUCCESS}代表成功,否则为失败*@paramresultInfo*/IRecorderCallBackShot.onRecordEnd(intresult, StringresultInfo);/*** 录制出现错误*@paramresult* 返回值*@paramresultInfo* 具体返回消息*/IRecorderCallBackShot.onRecordFailed(intresult, StringresultInfo); /** * 响应摄像头打开信息 *@paramnResult * 返回值 >={@link ResultConstants#SUCCESS}代表成功,否则为失败 *@paramstrResultInfo * 具体返回消息 */IRecorderCallBackShot.onCamera(intresult, StringresultInfo);/**
* 保存当前画面回调
* @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(booleanenableBeautify);
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-100RecorderCore.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 mVirtualVideomVirtualVideo = 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, StringreverseVideoPath, VideoConfig vc, final ExportListener listener)/**
*快速倒序(原视频必须每帧都为关键帧)
*
* @param context 上下文
* @param mediaObject 媒体对象
* @param reverseVideoPath倒序保存路径
* @param listener 倒序回调
*/
public static void ExportUtils.fastReverseSave(Context context,MediaObject mediaObject, StringreverseVideoPath, final ExportListener listener)
2.5.8MV第一步:注册MV,得到MVIdMVInfo temp = RdVECore.registerMV(localPath);第二步:设置MVif (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)/**
* 设置音频编码参数
*
*@paramnumChannels声音数
*@paramsampleRate采样率
*@parambitRate 码率(bps)
*/
public voidsetAudioEncodingParameters(intnumChannels,intsampleRate,intbitRate)
2.6打包混淆需要在proguard.cfg文件中添加如下配置项:-dontwarncom.rd.**-keep class com.rd.** { *; }#水印-keepclassmembers class * extends com.rd.recorder.OSDBuilder{* ;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。