支持Android 5.0或以上的设备,暂不支持模拟器调试
确保申请到有效的License,audiotoken,audioappkey
确保申请到Maven仓库的账号密码:获取方法请联系和您对接的技术支持经理
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 |
CutSame SDK | com.volcengine.ck.cutsame:CK-CutSameIF | 剪同款模版消费SDK,负责模版的重演,更新,合成能力。 |
CutSameConsumer | com.volcengine.ck.cutsame:CutSameConsumer | 剪同款模版协议转化SDK。 |
SDK版本号详情见 CKOne SDK 版本管理
. ├── app ├── business ├── editor-res (内置基础剪辑SDK所需要的资源) ├── record-res (内置的拍摄页面所需要的资源:贴纸,滤镜,美颜资源等) ├── draft (草稿箱模块) ├── gradle ├── gradle-config │ ├── include_source.gradle(快速include所有的module,配置在setting.gradle中) │ └── version.gradle (声明所有依赖版本号,会在构建时进行force) ├── module_api (各个模块API层代码) │ └── cutsame-api ├── module_business │ ├── cutsame (剪同款部分SampleCode) │ ├── CutSameUIIF (剪同款UISampleCode) │ ├── data-convert (剪同款,拍摄数据转化部分,如果没有接入拍摄部分不需要该部分代码) │ └── small-window (剪同款,拍摄页面的小窗UISampleCode,如果没有接入拍摄部分不需要该部分代码) │ ├── editor (剪辑部分SampleCode) │ └── recorder (拍摄部分SampleCode) ├── build.gradle ├── gradle.properties ├── gradlew ├── gradlew.bat ├── dependency-lock.json (用于声明所有module的json文件) ├── 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 版本号定义 |
VERSION_CODE | CKOne的version code 和 version name,可以不关注 |
MAVEN_USER_NAME MAVEN_PASS_WORD | maven仓库的账号和密码声明,您需要这个账号密码才能拉取到我们的SDK,可以联系您的技术支持经理获取 |
module_business下的cutsame模块代码Copy到您的项目中,需要保持和Demo中的路径一致,选择素材流程如果没有拍摄部分,不需要data-convert和small-window这两部分代码。
module_business下的recorder模块代码Copy到您的项目中,需要保持和Demo中的路径一致。选择素材流程如果没有拍摄部分,忽略这部分操作。
将module_api下的代码Copy到您的项目中,需要保持和Demo中的路径一致
copy资源模块,将recorder-res
copy到您的项目中,并替换成您自己的资源。选择素材流程如果没有拍摄部分,忽略这部分操作。
复制脚本
复制鉴权文件
将剪同款鉴权文件(带有“union”的文件)copy到您任意module的assset目录下
存放路径:resource/LicenseBag.bundle/yourLicenseFile(在ThrallCutSameInit类中会寻找这个路径下的授权文件)
鉴权文件存放位置必须严格按照约定的格式
参考以下settings.gradle文件
暂时无法在飞书文档外展示此内容
include ':record-res' include ':res-manager' project(":res-manager").projectDir = new File(rootDir, "module_business/recorder/res-manager") include ':verecorder' project(":verecorder").projectDir = new File(rootDir, "module_business/recorder/verecorder") include ':CutSameUIIF' project(":CutSameUIIF").projectDir = new File(rootDir, "module_business/cutsame/CutSameUIIF") include ':cutsame-api' project(":cutsame-api").projectDir = new File(rootDir, "module_api/cutsame-api") include ':data-convert' project(":data-convert").projectDir = new File(rootDir, "module_business/cutsame/data-convert") include ':small-window' project(":small-window").projectDir = new File(rootDir, "module_business/cutsame/small-window")
// 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 #配置相关SDK的版本,按需替换以下版本号。 NLE_VERSION=4.0.0 VESDK_VERSION=11.8.1.16-release-tob CUTSAME_IF_VERSION=4.0.0 #鉴权文件名称,ThrallCutSameInit类通过文件名找到该文件 cutSameLicenseName="xxxxxxxxxunion.licbag"
implementation project(':cutsame-api') //录制资源模块【可选】 implementation project(':record-res') //依赖拍摄部分【可选】 implementation project(':verecorder') //依赖剪同款部分 implementation project(':CutSameUIIF') //retrofit2 CutSame SDK内部用到 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
至此,源码集成工作结束,下面是SDK初始化配置
在项目的Application或者剪同款功能入口使用ServiceManager.getService(ICutSameExternalService::class.java)?.initCutSame(AppSingleton.instance as Application),完成初始化工作。需要修改ThrallCutSameInit.initCutSame里的相关配置。
//通过ICutSameExternalService的实现方CutsameExternalServiceImpl完成初始化。 ServiceManager.getService(ICutSameExternalService::class.java)?.initCutSame(AppSingleton.instance as Application)。
CutsameExternalServiceImpl的initCutSame方法里调用ThrallCutSameInit的initCutSame()方法。
//修改ThrallCutSameInit的initCutSame()的相关配置信息。 //默认的日志对象 val logWrapper = LogWrapper().apply { val logWrapper = LogWrapper().apply { init( logConfig = LogConfig.Builder() .logcatLevel(LogIF.LOG_LEVER.DEBUG) //控制台输出级别 .localLevel(LogIF.LOG_LEVER.WARNING) //本地文件输出级别 .toLocal(true) //本地文件输出开关 .toLogcat(true) //控制台输出开关 .showThreadInfo(true) //显示线程信息 .localPath(Environment.getExternalStorageDirectory().absolutePath) //本地输出文件路径 .build() ) } } //设置log接口,可自行实现LogIF接口。 CutSameSolution.setLogIf(logWrapper) CutSameSolution.init( context = this, //authorityConfig: 鉴权配置 authorityConfig = AuthorityConfig.Builder() .licensePath(getLicenseFilePath()) //鉴权文件本地路径 .audioAppKey("xxxx") //audio鉴权key .audioToken("xxxx") //audio鉴权token .authorityListener(object : AuthorityConfig.AuthorityListener { override fun onError(errorCode: Int, errorMsg: String) { Log.d(TAG, "onError $errorCode $errorMsg") } }).build(), //templateFetcherConfig: 模版拉取配置。如果不是使用CutSameSDK拉取模版数据,则不需要配置。 templateFetcherConfig = TemplateFetcherConfig.Builder() .host("http://xx.xxxx.net") .build(), //effectFetcherConfig: 特效拉取配置 effectFetcherConfig = EffectFetcherConfig.Builder() .host("http://xx.xxxx.net") .effectLitPath("/xxx/xxxx") .localModelPath("xxxxxx") //本地算法模型绝对路径,拍摄相关道具需要使用,智能抠像能力消费需要使用。 .build() )
//唤起模版列表,获取到Intent ServiceManager.getService(ICutSameExternalService::class.java)?.getTemplateUIIntent(context)
暂时无法在飞书文档外展示此内容