Page History

Instructions

Last edited by 王琳

4.短视频编辑SDK的使用方法

4.1 SDK初始化

4.2 配置指定参数

4.3 录制视频

4.4 编辑视频

4.5 调用相册

4.6 压缩视频

4.7 使用自定义播放器

4.8 响应退出

4.9 打包混淆

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{   * ;}

返回顶部