You need to enable JavaScript to run this app.
导航

【Android】拍摄&基础编辑 含 UI 接入文档

最近更新时间2023.02.03 11:53:36

首次发布时间2023.02.03 11:53:36

  1. 前提条件
  • 支持Android 5.0或以上的设备,暂不支持模拟器调试

  • 确保申请到有效的License以及Key和Token(详细信息参考5.4章节)

  • 确保申请到Maven仓库的账号密码:获取方法请联系和您对接的技术支持经理

  1. 运行环境

以下环境仅指CKOne SampleCode的运行环境,非SDK支持的运行环境

Gradle:6.7.1
Android Gradle Plugin:com.android.tools.build:gradle:4.1.3
kotlin: 1.5.30

minSdkVersion: 21
targetSdkVersion: 30
compileSdkVersion: 30
  1. SDK介绍
NameCoordinate说明
VESDKcom.bytedance.ugc.framework.libs:vesdk音视频剪辑SDK,负责音视频渲染

NLE SDK

com.volcengine.ck.nle:NLEMediaPublic

非线性编辑中间件SDK。一套音视频编辑API
但是不负责实际的音视频渲染与上屏,音视频渲染流程由VESDK完成

com.volcengine.ck.nle:NLEProcessorNLESDK的一个模块,负责「丝滑变速」等功能

智能语音(TTS)SDK

com.bytedance.speechengine:speechengine_tts_online_tob

负责文本转语音等功能
https://www.volcengine.com/docs/6561/79817

com.bytedance.frameworks.baselib:ttnet负责智能语音SDK中的网络模块

SDK版本号详情见 CKOne SDK 版本管理

  1. CKOne工程介绍
  2. 目录介绍

.
├── app
├── editor-res    (内置基础剪辑SDK所需要的资源)
├── record-res    (内置的拍摄页面所需要的资源:贴纸,滤镜,美颜资源等)
├── draft         (草稿箱模块)
├── gradle
├── gradle-config
│   └── version.gradle (声明所有依赖版本号,会在构建时进行force)
├── module_api    (各个模块API层代码)
│   └── cutsame-api
├── module_business
│   ├── cutsame   (剪同款部分SampleCode)
│   ├── editor    (剪辑部分SampleCode)
│   └── recorder  (拍摄部分SampleCode)
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
  1. Gradle脚本配置

源码接入前需要先配置version.gradle文件,用于统一定义SampleCode使用到的依赖
version.gradle存放于gradle-config文件夹

version.gradle

  1. 资源模块

editor-res

LocalResourceSampleCode自带的默认资源,未进行加密,可以随意使用

resource

剪辑SDK各种功能所需要的资源,像文字贴纸,滤镜,特效,蒙版等,
需要更换成您自己购买的资源

editor-res 目录介绍
.
├── ModelResource.bundle     色度抠图,抠像等功能需要的算法模型文件
├── adjust.bundle           【调节】
├── bubble.bundle           【文字】->【添加文字】->【气泡】
├── canvas.bundle           【画布】->【画布样式】
├── chroma.bundle           【剪辑】->【色度抠图】
├── curve_speed.bundle      【剪辑】->【速度】->【曲线变速】
├── flower.bundle           【文字】->【添加文字】->【花字】
├── mix.bundle              【剪辑】->【混合模式】
├── sticker.bundle          【贴纸】
├── sticker_animation.bundle【贴纸】->【动画】
├── text_align.bundle       【未使用】
├── text_animation.bundle   【文字】->【添加文字】->【动画】
├── text_color.bundle       【文字】->【添加文字】->【颜色】
├── text_fonts.bundle       【文字】->【添加文字】->【字体】
├── text_style.bundle       【文字】->【添加文字】->【样式】
├── text_template.bundle    【文字】->【文字模板】
├── tone.bundle             【音频】->【变声】
├── transitions.bundle      【转场】
├── ve_effect.bundle        【特效】
├── ve_filter.bundle        【滤镜】
├── video_animation.bundle  【剪辑】->【动画】
└── video_mask.bundle       【剪辑】->【蒙版】

record-res

ComposeMakeup.bundle美颜美妆资源
duet.bundle【首页】->【合拍】所需合拍资源
FilterResource.bundle【拍摄】->【滤镜】所需滤镜资源
ModelResource.bundle特效算法模型文件
StickerResource.bundle【拍摄】->【道具】所需贴纸资源
  1. 源码模块

每个模块的SampleCode是由1个api module + N个 business module 组成
如果您想复用的我们的SampleCode

  • api层的module需要都Copy过去(api层只有接口定义,没有任何实际的业务逻辑)

  • business module您可以按需要进行Copy

  1. gradle.properties文件

字段说明

android.useAndroidX=true android.enableJetifier=trueGradle配置,使用AndroidX系列SDK
NLE_VERSIONNLE SDK版本号定义
VESDK_VERSIONVESDK 版本号定义
CUTSAME_IF_VERSION剪同款SDK 版本号定义(未接入剪同款SDK可以不关注)

VERSION_CODE
VERSION_NAME

CKOne的version code 和 version name,可以不关注

MAVEN_USER_NAME MAVEN_PASS_WORDmaven仓库的账号和密码声明,您需要这个账号密码才能拉取到我们的SDK,可以联系您的技术支持经理获取
  1. CKOne集成介绍
  2. Copy代码

  • 将module_api和module_business下的代码Copy到您的项目中,并在settings.gradle中配置好

    具体配置可以参考CKOne Demo工程中的settings.gradle文件

  • copy资源模块,将editor-resrecorder-rescopy到您的项目中,并替换成您自己的资源

  • Draft 草稿箱模块可以视需求情况决定要不要Copy

  • 复制脚本

    • 将gradle-config下的version.gradle脚本copy至您的项目并apply
  • 复制鉴权文件

    将鉴权文件copy到您任意module的assets目录下
      存放路径:resource/LicenseBag.bundle/yourLicenseFile(路径不可变)

鉴权文件存放位置必须严格按照约定的格式

  1. 配置脚本

配置settings.gradle

参考Demo中的settings.gradle文件

暂时无法在飞书文档外展示此内容

项目根目录build.gradle配置

  • 将下面build.gradle的配置添加至您的项目
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    //【必须】添加version.gradle
    apply from: rootProject.file("gradle-config/version.gradle")
    repositories {
        google()
        mavenCentral()
        maven {  url 'https://artifact.bytedance.com/repository/Volcengine/' }
        }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.bytedance.news.common:service-manager-plugin:1.1.0.5-alpha.0"
    }
}

//【必须】必须添加这行脚本
apply from: 'https://ve-vos.volccdn.com/ckone/ckone_integration.gradle'

allprojects {
    repositories {
        google()
        mavenCentral()
        maven {  url "https://maven.aliyun.com/repository/public" }
        }
}

配置gradle.properties

#配置Maven库的账号密码,用于拉取SDK,账号密码不用加引号
MAVEN_USER_NAME=your user_name
MAVEN_PASS_WORD=your password
  1. 添加依赖和ServiceManager插件

在APP模块中应用ServiceManager插件

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    //【必须】应用ServiceManager插件
    id 'com.bytedance.news.common.service-manager'
}

dependencies {
    //【必须】添加ServiceManager注解处理器
    kapt "com.bytedance.news.common:service-manager-processor:1.0.9"
}

添加依赖

//基础剪辑资源模块
implementation project(':editor-res')
//录制资源模块
implementation project(':record-res')
//草稿模块
implementation project(':draft')

implementation project(':cutsame-api')

//依赖拍摄部分
implementation project(':verecorder')
//依赖基础剪辑部分
implementation project(':editor-main')
//依赖剪同款部分【可选】
implementation project(':CutSameUIIF')

至此,源码集成工作结束,下面是SDK初始化配置

  1. 初始化

可以参考CkOneApplication中的初始化逻辑

//第一步 配置CKAppConfig
CKAppConfig.apply{
    isOverSea = false
    productType = "Standard"
}
//第二步 配置CKOneConstant
CKOneConstant.apply  {
 
    appName = "CKOne"

    veLicensePath = "labcv_test_20220929_20221231_com.bytedance.solution.ck_4.2.6.5.licbag"

    veAppKey = "iWwiXvXhlN"
    veToken = AppConfigUtils.VE_TOKEN

    volcAccessKey = BuildConfig.volcAccessKey
    volcSecretKey = BuildConfig.volcSecretKey

    subtitleAppId = AppConfigUtils.subtitleAppId()
    subtitleToken = AppConfigUtils.subtitleToken()
}
//上述参数配置的具体作用请参考代码注释,或者下面表格

//第三步 AppSingleton初始化
AppSingleton.bindInstance(this)

//第四步 copy内置资源至SD卡
ResInitHelper.copyResourceToLocal(null)

//第五步 初始化VESDK
VEInit.init()

//第六步 初始化基础剪辑SDK
CKEditorInitializer.init(this)

初始化参数介绍

CKAppConfig

isOverSea

标记是否是海外版SDK,国内用户传false

productTypeSDK类型,分 "Standard" , "Lite" , "Mini"

CKOneConstant

appName

您接入的产品的名字,默认default

veLicensePath您的鉴权文件的名字

veAppKey
veToken

鉴权的key和Token

volcAccessKey
volcSecretKey

「音乐踩点功能」所需的秘钥,没有的话可以不赋值,对应功能将不可用

subtitleAppId
subtitleToken

「文本朗读」「字幕识别」等功能所需的秘钥,没有的话可以不赋值,对应功能将不可用

  1. 唤起对应页面,并获取视频路径

具体逻辑可以参考Demo CKHomeDelegate中的实现

//唤起拍摄页
checkAuth {
    checkPermissions {
        checkResourceReady {
            PreviewActivity.startPreviewActivity(activity, null)
        }
        }
}
//唤起基础剪辑页面
checkAuth {
    checkPermissions {
        checkResourceReady {
            EditorHelper.startEditor(activity)
        }
        }
}
//获取合成后的视频路径 在onActivityResult中获取
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    when (requestCode) {
    ActivityRequestCode.CKEDITOR_ACTIVITY -> {
        //获取编辑页合成后的视频
        if (resultCode == Activity.RESULT_OK) {
            val editCompileVideoPath = data.getStringExtra(ExtraConstants.EXTRA_COMPILE_VIDEO_PATH) ?: ""
            LogKit.d(TAG, "compile video path: $editCompileVideoPath")
        }
    }
}