支持Android 5.0或以上的设备,暂不支持模拟器调试
确保申请到有效的License以及Key和Token(详细信息参考5.4章节)
确保申请到Maven仓库的账号密码:获取方法请联系和您对接的技术支持经理
以下环境仅指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
Name | Coordinate | 说明 |
---|---|---|
VESDK | com.bytedance.ugc.framework.libs:vesdk | 音视频剪辑SDK,负责音视频渲染 |
NLE SDK | com.volcengine.ck.nle:NLEMediaPublic | 非线性编辑中间件SDK。一套音视频编辑API |
com.volcengine.ck.nle:NLEProcessor | NLESDK的一个模块,负责「丝滑变速」等功能 | |
智能语音(TTS)SDK | com.bytedance.speechengine:speechengine_tts_online_tob | 负责文本转语音等功能 |
com.bytedance.frameworks.baselib:ttnet | 负责智能语音SDK中的网络模块 |
SDK版本号详情见 CKOne SDK 版本管理
. ├── 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
源码接入前需要先配置version.gradle文件,用于统一定义SampleCode使用到的依赖
version.gradle存放于gradle-config文件夹
LocalResource | SampleCode自带的默认资源,未进行加密,可以随意使用 |
---|---|
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 【剪辑】->【蒙版】
ComposeMakeup.bundle | 美颜美妆资源 |
---|---|
duet.bundle | 【首页】->【合拍】所需合拍资源 |
FilterResource.bundle | 【拍摄】->【滤镜】所需滤镜资源 |
ModelResource.bundle | 特效算法模型文件 |
StickerResource.bundle | 【拍摄】->【道具】所需贴纸资源 |
每个模块的SampleCode是由1个api module + N个 business module 组成
如果您想复用的我们的SampleCode
api层的module需要都Copy过去(api层只有接口定义,没有任何实际的业务逻辑)
business module您可以按需要进行Copy
android.useAndroidX=true android.enableJetifier=true | Gradle配置,使用AndroidX系列SDK |
---|---|
NLE_VERSION | NLE SDK版本号定义 |
VESDK_VERSION | VESDK 版本号定义 |
CUTSAME_IF_VERSION | 剪同款SDK 版本号定义(未接入剪同款SDK可以不关注) |
VERSION_CODE | CKOne的version code 和 version name,可以不关注 |
MAVEN_USER_NAME MAVEN_PASS_WORD | maven仓库的账号和密码声明,您需要这个账号密码才能拉取到我们的SDK,可以联系您的技术支持经理获取 |
将module_api和module_business下的代码Copy到您的项目中,并在settings.gradle
中配置好
具体配置可以参考CKOne Demo工程中的settings.gradle文件
copy资源模块,将editor-res
和recorder-res
copy到您的项目中,并替换成您自己的资源
Draft 草稿箱模块可以视需求情况决定要不要Copy
复制脚本
复制鉴权文件
将鉴权文件copy到您任意module的assets目录下
存放路径:resource/LicenseBag.bundle/yourLicenseFile(路径不可变)
鉴权文件存放位置必须严格按照约定的格式
参考Demo中的settings.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" } } }
#配置Maven库的账号密码,用于拉取SDK,账号密码不用加引号 MAVEN_USER_NAME=your user_name MAVEN_PASS_WORD=your password
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初始化配置
可以参考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 |
---|---|---|
productType | SDK类型,分 "Standard" , "Lite" , "Mini" | |
CKOneConstant | appName | 您接入的产品的名字,默认default |
veLicensePath | 您的鉴权文件的名字 | |
veAppKey | 鉴权的key和Token | |
volcAccessKey | 「音乐踩点功能」所需的秘钥,没有的话可以不赋值,对应功能将不可用 | |
subtitleAppId | 「文本朗读」「字幕识别」等功能所需的秘钥,没有的话可以不赋值,对应功能将不可用 |
具体逻辑可以参考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") } } }