本文介绍集成 veVOS 解决方案相关 SDK 的方法,根据文档提供的操作步骤进行配置,您可以将 veVOS 解决方案下的 SDK 集成到 Android App 工程中。
ttsdk-ttlivepush_rtc
、ttsdk-ttlivepull_rtc
、effectsdk
和 RangersAppLog-Lite-cn
的版本号。veVOS 互动直播场景下,您需要获取视频直播 License、实时音视频(RTC)Licnese 和智能美化特效(CV)License。
产品 | 对应功能模块 | 获取方式 |
---|---|---|
视频直播 | 直播推流、直播拉流 | 获取视频直播 License |
实时音视频 | 连麦 | 请联系您的商务经理 |
智能美化特效 | 贴纸特效、美化滤镜、人像智能、手势与人体检测等 | 请联系您的商务经理 |
https://artifact.bytedance.com/repository/Volcengine/
。集成代码示例如下所示。allprojects { repositories { google() mavenCentral() maven { url "https://artifact.bytedance.com/repository/Volcengine/" // volc public maven repo } } } apply from: 'https://ve-vos.volccdn.com/script/vevos-repo-rtc.gradle' apply from: 'https://ve-vos.volccdn.com/script/vevos-repo-cv-ck.gradle'
android { defaultConfig { ndk { //设置 SO 库架构,支持 armv7a 和 arm64 架构。 abiFilters 'armeabi-v7a', 'arm64-v8a' } } } dependencies { ...... //最新版本号获取方式请参考[前提条件]章节 //直播推流互动版本,例如,1.33.2.102.onekit implementation 'com.bytedanceapi:ttsdk-ttlivepush_rtc:x.x.x.x' //直播拉流互动版本,例如,1.33.2.102.onekit implementation 'com.bytedanceapi:ttsdk-ttlivepull_rtc:x.x.x.x' //智能美化特效 implementation 'com.bytedance:effectsdk:xxxx' //日志上报 SDK,用于直播日志上传 implementation 'com.bytedance.applog:RangersAppLog-Lite-global:xxxx' //添加第三方依赖。 implementation 'commons-net:commons-net:3.6' // 开启 HTTPDNS 解析 implementation 'com.squareup.okhttp3:okhttp:4.2.1' }
在 AndroidManifest.xml 文件中声明应用间交互的权限。
<!-- 使用权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" />
添加动态申请权限代码。
private boolean checkPermission(int request) { String permissions[] = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.MODIFY_AUDIO_SETTINGS, Manifest.permission.INTERNET }; List<String> permissionList = new ArrayList<>(); for (String permission : permissions) { boolean granted = ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; if (granted) continue; permissionList.add(permission); } if (permissionList.isEmpty()) return true; String permissionsToGrant[] = new String[permissionList.size()]; permissionList.toArray(permissionsToGrant); ActivityCompat.requestPermissions(this, permissionsToGrant, request); return false; }
拷贝 License 文件到工程目录下。例如下图所示,将 License2_test.lic 文件拷贝到 assets 目录下。
在 proguard-rules.pro 文件中,将 SDK 相关类加入不混淆名单。
//直播混淆规则 -keep class com.pandora.**{*;} -keep class com.ss.**{*;} -keep class com.bytedance.**{*;} -keep class com.pandora.ttlicense2.**{*;} -keep class com.bytertc.**{*;} -keep class log.**{*;} //CV 混淆规则 -keep class com.bytedance.labcv.effectsdk.** {;} -keep class com.bef.effectsdk.* {*;} -keep class com.bytedance.labcv.licenselibrary.** {*;}
调用ENV.init
初始化 TTSDK。
//TTSDK 环境初始化。 Env.init(new Config.Builder() .setApplicationContext(sApplicationContext) .setAppID(填写申请的AppID); .setAppName(填写申请的应用名称) .setAppVersion(BuildConfig.VERSION_NAME) // 合法版本号应大于、等于 2 个分隔符,如:"1.3.2" .setAppChannel("veVOSLiveDemo") .setLicenseUri("assets:///license/live.lic") .setLicenseCallback(mLicenseCallback)//License 加载的状态回调 .build()); //开启 License 模块 logcat 输出。建议排查问题时开启,发包时关闭。 //LicenseManager.turnOnLogcat(true); //License 回调对象 LicenseManager.Callback mLicenseCallback =new LicenseManager.Callback() { @Override public void onLicenseLoadSuccess(@NonNull String licenseUri, @NonNull String licenseId) { licenseID = licenseId;//License ID,用于获取License的信息 } @Override public void onLicenseLoadError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) { } @Override public void onLicenseLoadRetry(@NonNull String licenseUri) { } @Override public void onLicenseUpdateSuccess(@NonNull String licenseUri, @NonNull String licenseId) { licenseID = licenseId; } @Override public void onLicenseUpdateError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) { } @Override public void onLicenseUpdateRetry(@NonNull String licenseUri) { } }; //License 信息获取。 License license = LicenseManager.getInstance().getLicense(licenseID);//licenseID 从mLicenseCallback 回调函数中获取 if (license != null) { StringBuilder builder = new StringBuilder(); builder.append("License id:" + license.getId()).append("\n") .append("License package:" + license.getPackageName()).append("\n") .append("License test:" + license.getType()).append("\n") .append("License version:" + license.getVersion()).append("\n"); if (license.getModules() != null) { String names = ""; for (License.Module module : license.getModules()) { names = "module name:" + module.getName() + ", start time:" + TimeUtil.format(module.getStartTime(), Times.YYYY_MM_DD_KK_MM_SS) + ", expire time:" + TimeUtil.format(module.getExpireTime(), Times.YYYY_MM_DD_KK_MM_SS) + "\n"; builder.append("License modules:" + names); } } }
初始化详细的参数说明如下表所示。
参数 | 类型 | 说明 |
---|---|---|
AppId | String | App ID,必填,从控制台 SDK 管理获取。 |
AppName | String | 必填, App 英文名,从控制台 SDK 管理获取。 |
AppVersion | String | 必填,App 版本号,使用 BuildConfig.VERSION_NAME,合法版本号应包含大于、等于 2 个分隔符,如:"1.3.2" |
AppChannel | String | 必填,渠道号;业务自定义,如:小应用商店 (xiaomi)、华为应用市场 (huawei) 等。 |
LicenseUri | String | 必填,License 路径。 |
线上问题的排查和质量平台的数据展示都依赖 SDK 上报的日志,因此,日志上报功能默认开启。如有特殊的数据保密要求,您可以在初始化环境前,设置 Env.openAppLog(false)
,关闭日志上报。