4.短视频编辑SDK的使用方法
4.1 SDK初始化
todo:添加SDK初始化方法
回调接口为:
public interface ICNSdkCallBack {
/**
* 目标视频的路径
*
* @param context 应用上下文
* @param exportType 回调类型 来自简单录制 {@link CNSdkEntry#CAMERA_EXPORT}<br>
* 来自录制编辑{@link CNSdkEntry#CAMERA_EDIT_EXPORT}<br>
* 来自编辑导出{@link CNSdkEntry#EDIT_EXPORT}<br>
* 来自普通截取视频导出{@link CNSdkEntry#TRIMVIDEO_EXPORT}<br>
* 来自定长截取视频导出{@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br>
* @param videoPath
*/
void onGetVideoPath(Context context, int exportType, String videoPath);
/**
* 响应截取视频时间
*
* @param context 应用上下文
* @param exportType 回调类型 来自普通截取视频的时间导出{@link CNSdkEntry#TRIMVIDEO_EXPORT}<br>
* 来自定长截取视频的时间导出{@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br>
* @param startTime 开始时间 单位:秒
* @param endTime 结束时间 单位:秒
*/
void onGetVideoTrimTime(Context context, int exportType,
float startTime, float endTime);
/**
* 响应确认截取按钮
*
* @param context 应用上下文
* @param exportType 来自普通截取的确认 {@link CNSdkEntry#TRIMVIDEO_EXPORT}<br>
* 来自定长截取的确认 {@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br>
*/
void onGetVideoTrim(Context context, int exportType);
/**
* 响应进入相册(只显示照片、图片)
*
* @param context 应用上下文
*/
void onGetPhoto(Context context);
/**
* 响应进入相册(只显示视频)
*
* @param context 应用上下文
*/
void onGetVideo(Context context);
4.2 配置指定参数
SDK 初始化成功之后,需要部分自定义功能时需指定配置参数,不指定时也不会影响使用,只是按照默认配置进行调用。
a.编辑界面配置
CNUIConfiguration uiConfig = new CNUIConfiguration()
//设置是否使用自定义相册(传 false 将调用秀拍客相册)
.setUseCustomAlbum(useCustomAblum)
//设置是否开启向导化
.setEnableWizard(boolean enable)
//设置滤镜界面风格
.setFilterLayoutType(layoutType)
//设置配乐地址
.setMusicUrl(musicUrl)
// 设置 MV 及 MV 资源 url,详见自定义 MV 资源
.setEnableMV(boolean enable,String url)
// 设置视频默认比例
.setVideoProportion(proportion)
// 设置相册支持格式
.setAlbumSupportFormatType(albumSupportFormatType)
// 设置视频选择最大数量
.setMediaCountLimit(int countlimit)
// 设置是否隐藏相册中的拍摄按钮
.setEnableAlbumCamera(boolean enable)
//设置编辑导出功能模块显示与隐藏
.setEditAndExportModuleVisibility(editAndExportModules, visibility)
//设置片段编辑功能模块显示与隐藏 .setClipEditingModuleVisibility(clipEditingModules,visibility)
// 启用自动重播
.setEnableAutoRepeat(boolean enable);
- 其中CNEditAndExportModules 是编辑导出功能模块枚举
public enum CNEditAndExportModules {
/**
* 配乐
*/
SOUNDTRACK,
/**
* 配音
*/
DUBBING,
/**
* 滤镜
*/
FILTER,
/**
* 字幕
*/
TITLING,
/**
* 特效
*/
SPECIAL_EFFECTS,
/**
* 片段编辑
*/
CLIP_EDITING,
}
-
CNClipEditingModules 是片段编辑模块枚举
public enum CNClipEditingModules { /** * 所有模块 */ ALL, /** * 视频调速 */ VIDEO_SPEED_CONTROL, /** * 设置图片时长 */ IMAGE_DURATION_CONTROL, /** * 复制 */ COPY, /** * 图片视频编辑 */ EDIT, /** * 视频比例 */ PROPORTION, /** * 调序 */ SORT, /** * 截取 */ TRIM, /** * 分割 */ SPLIT, /** * 文字板 */ TEXT, /** * 倒序 */ REVERSE, /** * 转场 */ TRANSITION; }
b.导出视频配置
CNExportConfiguration exportConfig = new CNExportConfiguration()
// 设置保存路径,传null或不设置
// 将保存至默认路径(即调用CNSdkEntry.initialize初始时自定义路径)
.setSavePath(savePath)
//设置实际截取时视频导出最大边,不设置时,默认为 640
.setExportVideoMaxWH(640)
//设置实际截取时视频导出码率,Mbps 为单位,不设置时,默认为 4
.setExportVideoBitRate(4)
//设置视频导出帧率,,不设置时,默认为 30
.setExportVideoFrameRate(30)
// 设置片尾图片路径,传null或者不设置 将没有片尾
.setTrailerPath(trailerPath)
// 设置片尾时长 单位s 默认2s
.setTrailerDuration(trailerDuration)
//设置导出视频时长 单位 s(设置为 0 或默认不设置将导出完整视频)
.setExportVideoDuration(exportVideoDuration)
// 设置图片水印路径
.setWatermarkPath(watermarkPath)
// 设置是否使用文字水印(使用文字水印,将不再显示图片水印)
.setEnableTextWatermark(enableTextWatermark)
// 设置文字水印内容(开启文字水印才生效)
.setTextWatermarkContent(content)
// 设置文字水印大小(开启文字水印才生效)
.setTextWatermarkSize(size)
// 设置文字水印颜色(开启文字水印才生效)
.setTextWatermarkColor(color)
// 设置文字水印阴影颜色(开启文字水印才生效)
.setTextWatermarkShadowColor(shadowColor)
// 设置水印位置 (文字或图片水印开启才生效)
.setWatermarkShowRectF(showRectF);
c.录制拍摄配置
CNCameraConfiguration configuration = new CNCameraConfiguration()
//设置限制录制的最小视频时长 单位为秒 0 代表没有限制
.setVideoMinTime(minTime)
//设置限制录制的最大视频时长 单位为秒 0 代表没有限制
.setVideoMaxTime(maxTime)
// 为true代表多次拍摄,拍摄完成一段之后,将保存至相册并开始下一段拍摄,默认为false单次拍摄,拍摄完成后返回资源地址
.setUseMultiShoot(configData.useMultiShoot)
//设置录制时启动默认页面方式
.setCameraUIType(UIType)
// 设置拍摄完成后,是否保存至相册(仅单次拍摄方式有效),同时通过onActivityResult及SIMPLE_CAMERA_REQUEST_CODE返回
.setSaveToAlbum(boolean isSaveToAlbum)
// 设置录制时是否静音,true代表录制后无声音
.setAudioMute(mute)
//设置是否启用人脸识别及贴纸
.setEnableFaceU(enableFace)
//设置人脸贴纸/挂件鉴权证书
.setPack(byte[] _pack)
// 设置是否默认为后置摄像头
.setDefaultRearCamera(rearCamera)
// 是否显示相册按钮
.setEnableAlbum(boolean enableAlbum)
// 是否使用自定义相册
.setUseCustomAlbum(boolean useCustomAlbum)
// 设置隐藏拍摄功能(全部隐藏将强制开启视频拍摄)
.setHideMV(boolean hideMV)
.setHidePhoto(boolean hidePhoto)
.setHideRec(boolean hideRec)
// 设置mv最小时长
.setCameraMVMinTime(mVMinTime)
// 设置mv最大时长
.setCameraMVMaxTime(mvMaxTime)
// 开启相机水印时需注册水印
//CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class);
// 相机录制水印
.setEnableWatermark(boolean enableWatermark)
// 相机水印片头
.setCameraTrailerTime(CNOSDState.header, 2f)
// 相机录制结束时片尾水印时长(0-1.0 单位:秒)
.setCameraTrailerTime(CNOSDState.end,second)
// 是否启用防篡改录制
.setEnableAntiChange(boolean enableAntiChange)
//前置摄像头录制时,输出的视频与预览视频一致
.setEnableFrontMirror(boolean enable)
//设置录制界面的默认方向(仅全屏录制模式时有效 CNCameraConfiguration#ONLY_WIDE_SCREEN)
.setOrientation(orientation)
// 是否支持录制时播放音乐
.setEnablePlayMusic(boolean enablePlayMusic)
// 是否美颜
.setEnableBeauty(boolean enableBeauty)
- 其中CNCameraUIType可选常量定义如下
//代表默认启动 16:9 宽屏录制界面并可切换到 1:1 界面 CNCameraConfiguration.WIDE_SCREEN_CAN_CHANGE
//代表默认启动 1:1 界面并可切换到 16:9 宽屏录制界面 CNCameraConfiguration.SQUARE_SCREEN_CAN_CHANGE
//代表默认启动 1:1 界面并不可切换到 16:9 宽屏录制界面 CNCameraConfiguration.ONLY_SQUARE_SCREEN
d.人脸识别及贴纸配置
CNFaceuConfig config = new CNFaceuConfig();
// 设置开启美颜时美白的等级 (参数值0.0f-1.0f,开启人脸识别且开启美颜之后生效)
config.setColor_level(0.48f);
// 设置开启美颜时磨皮的等级(参数值0.0f-4.0f,开启人脸识别且开启美颜之后生效)
config.setBlur_level(4.0f);
// 设置开启美颜时瘦脸的等级 (有效参数值0.0f-2.0f,开启人脸识别且开启美颜之后生效)
config.setCheek_thinning(0.68f);
// 设置美颜时大眼的等级(有效参数值0.0f-4.0f,开启人脸识别且开启美颜之后生效)
config.setEye_enlarging(1.53f);
// 方式一: 加载本地资源
String dog = root + "BeagleDog.mp3", dogIcon = root
+ "beagledog.png";
String yellowEar = root + "YellowEar.mp3", YellowEarIcon = root
+ "yellowear.png";
addItem(asset, dog, "BeagleDog.mp3", dogIcon, "beagledog.png",
"BeagleDog");
addItem(asset, yellowEar, "YellowEar.mp3", YellowEarIcon,
"yellowear.png", "YellowEar");
// 方式二:加载网络资源,设置网络化的人脸贴纸数据接口
config.enableNetFaceu(true, URL);
e.截取配置
CNTrimConfiguration config = new CNTrimConfiguration()
//设置实际截取时视频导出最大边,不设置时,默认为 640
.setExportVideoMaxWH(640)
//设置实际截取时视频导出码率,Mbps 为单位,不设置时,默认为 4
.setExportVideoBitRate(4)
// 设置默认裁剪区域为1:1
.setDefault1x1CropMode(true)
// 设置是否显示1:1裁剪按钮
.setEnable1x1(boolean enable1x1)
// 设置截取返回类型
.setTrimReturnMode(returnMode)
// 设置截取类型
.setTrimType(trimType)
// 设置两定长截取时间
.setTrimDuration(trimTime1,trimTime2)
// 设置单个定长截取时间
.setTrimDuration(trimSingleFixedDuration)
- 其中截取返回类型returnMode可选常量定义如下
//真实截取 CNTrimConfiguration.TRIM_RETURN_MEDIA
//返回时间段 CNTrimConfiguration.TRIM_RETURN_TIME
//动态截取 CNTrimConfiguration.TRIM_DYNAMIC_RETURN
- 截取类型 trimType 可选常量定义如下:
//自由截取 CNTrimConfiguration.TRIM_TYPE_FREE
//单个定长截取 CNTrimConfiguration.TRIM_TYPE_SINGLE_FIXED
//双定长截取 CNTrimConfiguration.TRIM_TYPE_DOUBLE_FIXED
f.压缩视频配置
CNCompressConfiguration config = new CNCompressConfiguration()
// 设置是否使用硬件加速
.setEnableHWCode(boolean enableHWCode)
// 设置压缩视频码率
.setBitRate(compressBitRate)
// 是否显示水印
.setEnableWatermark(enableCompressWatermark)
// 显示水印的位置
.setWatermarkPosition(position)
// 设置视频分辨率
.setVideoSize(videoWidth,videoHeight)
// 设置保存路径
.setSavePath(path)
指定配置参数例子:
CNSdkEntry.getSdkService().initConfiguration(
exportConfig,//导出配置
uiConfig,//界面配置
cameraConfig);//录制拍摄配置
4.3 录制视频
进入该界面调用以下接口:
public static void CNSdkEntry.record(
Context context, //应用上下文
int requestCode //用于 ActivityResult 返回
)
录制视频或录制视频并编辑导出完成后将会通过 ActivityResult 返回视频地址:
data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH); //返回的视频地址 data.getStringExtra(CNSdkEntry.INTENT_KEY_PICTURE_PATH); //返回的图片地址
使用回调接口方式将使用
4.4 编辑视频
4.4.1 进入 sdk 的功能界面 (相册选择并进入编辑界面)
void CNSdkEntry.selectMedia(
Context context//应用上下文
int requestCode //onActivityResult 的返回值
)
4.4.2 进入 sdk 的编辑界面 (直接进入编辑界面)
void CNSdkEntry.editMedia(
Context context,//应用上下文
ArrayList<String> list //媒体路径集合(可用的图片或视频的路径)
int requestCode //onActivityResult 的返回值
)
4.4.3 进入 sdk 的截取界面 (直接进入截取界面)
void CNSdkEntry.trimVideo(
Context context, //应用上下文
String videoPath, //媒体路径
int requestCode //返回所需要的 requestCode
);
结果返回方式 1:通过 onActivityResult 回调,具体参照 demo 截取结果返回方式 CNTrimConfiguration.TRIM_DYNAMIC_RETURN 不适合这种方式,需使用方式 2
结果返回方式 2:
完成截取需分为两个步骤,第一步是先确认截取返回方式,第二步通过返回方式将最终的结果通过对应的回调接口进行返回。
- 第一步:确认截取返回方式
确认截取返回方式时将会回调以下接口:
ICNSdkCallBack.getVideoTrim(
context,//应用上下文
exportType //回调类型
)
其中回调类型 exportType 参数值定义如下:
CNSdkEntry.TRIMVIDEO_EXPORT //普通截取 CNSdkEntry.TRIMVIDEO_DURATION_EXPORT //定长截取
- 第二步:设置截取返回方式
通过以下接口完成截取返回方式设置:
void CNSdkEntry.onVideoTrim(
Context context, //应用上下文
int returnType //需要给定的截取返回方式
)
其中截取返回方式 returnType 参数值定义如下:
RETURN_TRIM_VIDEO = 0//返回截取后视频
完成截取并导出视频后将会回调以下接口:
ICNSdkCallBack.getVideoPath(
context, //应用上下文
exportType,//截取并导出视频回调类型
videoPath//截取并导出后的视频路径
)
其中回调类型 exportType 参数值定义如下:
CNSdkEntry.TRIMVIDEO_EXPORT //普通截取 CNSdkEntry.TRIMVIDEO_DURATION_EXPORT //定长截取
CNRETURN_TRIM_TIME = 1//返回截取时间
截取界面将会返回截取视频的开始和结束时间 并执行以下回调:
ICNSdkCallBack.getVideoTrimTime(
context, //应用上下文
exportType,//返回截取时间回调类型
startTime,//开始时间(单位 ms)
endTime //结束时间(单位 ms)
)
其中回调类型 exportType 参数值定义如下:
CNSdkEntry.TRIMVIDEO_EXPORT //普通截取 CNSdkEntry.TRIMVIDEO_DURATION_EXPORT //定长截取
4.4.4 导出视频 编辑完成后,根据导出配置生成视频,导出完成后将会回调以下接口:
ICNSdkCallBack.getVideoPath(
context, //应用上下文
exportType,//导出视频回调类型
videoPath//视频路径
)
其中回调类型 exportType 参数值定义如下:
CNSdkEntry.EDIT_EXPORT //普通编辑导出完成后的返回 CNSdkEntry.CAMERA_EDIT_EXPORT//代表录制完成并编辑导出后的返回
视频导出完成后还可以通过 ActivityResult 返回视频的地址:
data.getStringExtra(CNSdkEntry.EDIT_RESULT)
4.5 调用相册
调用以下接口可直接进入秀拍客相册:
CNSdkEntry.openAlbum(
context, //应用上下文
formatType, //相册支持的类型
requestCode //用于 ActivityResult 返回)
其中回调类型 formatType 参数值定义如下:
CNUIConfiguration.ALBUM_SUPPORT_DEFAULT //默认(同时支持图片与视频) CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY //仅支持视频 CNUIConfiguration.ALBUM_SUPPORT_IMAGE_ONLY //仅支持图片
确认选择图片或视频后将会通过 ActivityResult 返回它们的本地路径
data .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT)
4.6 压缩视频
调用接口
CNSdkEntry.onCompressVideo(this, videoPath, iCompressVideoCallback);
其中 iCompressVideoCallback 是回调函数
public interface ICNCompressVideoCallback {
/**
* 压缩开始回调接口
*/
void onCompressStart();
/**
* @param progress 当前进度
* @param max 最大进度
*/
void onProgress(int progress, int max);
/**
* 压缩完成回调接口
*/
void onCompressComplete(String path);
/**
* 压缩失败回调接口
*/
void onCompressError(String errorLog);
}
4.7 使用自定义播放器
4.7.1 在布局文件中添加播放器
<com.cnlive.veuisdk.CNVideoView
android:id="@+id/svpriview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
4.7.2 播放器设置listener
void setPlayerListener(CNPlayerListener listener)
4.7.3 播放器接口
setVideoPath(String videoPath) //设置视频路径
boolean isPlaying() //判断播放器是否正在播放
void start() //开始播放
void pause() //暂停播放
float getCurrentPosition() //获取当前播放进度
void seekTo(float position) //跳到指定播放位置(单位秒)
int getDuration() //获取媒体时长,单位秒
4.8 响应退出
应用结束时,需调用一下 SDK 的退出接口 CNSdkEntry.exitApp,一般是在最后退出 Activity 中的 onDestroy 方法内,具体实现参见 demo。
4.9 打包混淆
-dontwarn com.cnlive.**
-keep com.cnlive.**{*;}
-keepclassmembers class com.faceunity.wrapper {*;}
-keepclassmembers class com.spap.** {*;}
#水印
-keepclassmembers class * extends com.rd.recorder.OSDBuilder{ * ;}