开播 SDK 提供录屏直播和视频直播两大功能。本文介绍如何将开播 SDK 集成到您的 Android App 中。
增加以下配置到项目根目录下的 build.gradle
文件。
buildscript { repositories { google() mavenCentral() } dependencies { // 推荐使用 3.6.3 或更高的版本 classpath 'com.android.tools.build:gradle:3.6.3' } } allprojects { repositories { google() mavenCentral() jcenter() maven { url "https://artifact.bytedance.com/repository/Volcengine/" // 火山引擎的官方仓库地址 } maven { url "https://artifact.bytedance.com/repository/thrall_base/" // 推流仓库地址 credentials { username = 'veVOS' // 访问推流仓库的用户名,无需更改 password = 'KUC9TpKrqbryrxHz' // 访问推流仓库的密码,无需更改 } authentication { digest(BasicAuthentication) } } flatDir { dirs 'libs' // CV SDK 文件 effectAAR-release.aar 的本地目录 } } }
增加以下配置到 app
目录下的 build.gradle
文件。
android { defaultConfig { minSdkVersion 21 ndk { abiFilters "armeabi-v7a","arm64-v8a" } } packagingOptions { pickFirst '**/libc++_shared.so' } // 开启数据绑定 buildFeatures { dataBinding true } } // 引入所需依赖 dependencies { // 引入开播 SDK。如不需要录屏直播功能,则使用 implementation "com.bytedance.bdlive:bdlive-push-remove-rtc:1.47.1.external" 引入不含录屏直播功能的开播 SDK implementation "com.bytedance.bdlive:bdlive-push:1.47.1.external" // 引入 Glide 图片库。如果项目已经引入 Glide 图片库,请查看 Glide 版本兼容性章节确保 Glide 版本兼容 implementation "com.github.bumptech.glide:glide:4.15.1" }
自开播 SDK 1.29.0 版本开始,依赖的图片库组件已迁移至 Glide。Glide 不同版本的 API 存在较大差异,为避免由于调用不同版本的 API 导致崩溃,请参考以下内容确保 Glide 版本兼容性。项目引入的 Glide 版本不同,确保兼容性的方法也不同。
app
目录下的 build.gradle
文件并增加以下配置。// 引入开播 SDK implementation("com.bytedance.bdlive:bdlive-push:x.x.x.external"){ { // 移除默认的 bdlive-glide-v4 库 exclude group:"com.bytedance.bdlive",module:"bdlive-glide-v4" } } // 引入 bdlive-glide-adapt-v4 库 implementation "com.bytedance.bdlive:bdlive-glide-adapt-v4:1.1.5"
说明
开播 SDK 不支持 Glide 3.x 版本。建议将 Glide 升级至最新版本,升级后无需额外操作即可确保 Glide 版本兼容性。
在 app/src/main
目录下的 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.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 相机权限 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 录音权限--> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- 前台 service 权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
在 app
目录下的 proguard-rules.pro
文件中添加以下混淆规则。
-keep class com.pandora.**{*;} -keep class com.ss.**{*;} -keep class com.bytedance.**{*;} -keep class com.pandora.ttlicense2.**{*;} -keep class com.bytertc.**{*;} -keep class org.webrtc.**{*;} -keep class com.effectsar.**{*;} -keep class com.bef.**{*;}
在 app/src/main
目录下,创建 assets/lic
目录并把获取到的直播 License 文件 liveLicense.lic
放到 assets/lic
目录下。文件结构如下:
app |-- src |-- main |-- java |-- assets |-- lic |-- liveLicense.lic
在初始化 Application 的过程中,调用 BDLiveEnv.init
初始化 BDLive SDK,即开播 SDK。
注意
初始化不获取用户个人信息。
private void initBDLiveEnv() { String assetsLicenseUri2 = "assets:///lic/example.lic"; // 将 assets:///lic/example.lic 替换为直播 License 的 URI BDLiveEnv.init(new BDLiveConfig.Builder() .setApplicationContext(this) .setAppId("APP_ID") // 将 APP_ID 替换为在 SDK 应用创建后生成的 App ID .setAppName("APP_NAME") // 将 APP_NAME 替换为创建 SDK 应用时填写的 App 英文名称 .setAppChannel("CHANNEL_NAME") // 将 CHANNEL_NAME 替换为 App 的渠道名称,例如小米应用商店(xiaomi)、华为应用市场(huawei)等 .setAppVersion("APP_VERSION") // 将 APP_VERSION 替换为 App 的版本号。合法版本号应包含 2 个或以上的分隔符,例如 1.3.2 .setAppRegion("REGION") // 将 REGION 替换为创建 SDK 应用时使用的地域,即 china .setLiveLicenseUri(assetsLicenseUri2) // 直播 License 的 URI .setUseSecureInfoCollect(true) // 是否开启信息采集安全模式。true:开启,不采集用户个人信息。false:不开启,采集用户个人信息。默认值:true .setLicenseCallback(new LicenseManager.Callback() { // License 的鉴权结果回调。鉴权后,SDK 会触发对应回调,通知您鉴权结果。您可按需选择是否调用鉴权结果回调 @Override // License 鉴权成功回调 public void onLicenseLoadSuccess(@NonNull String licenseUri, @NonNull String licenseId) { } @Override // License 鉴权失败回调 public void onLicenseLoadError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) { } @Override // License 鉴权重试回调 public void onLicenseLoadRetry(@NonNull String licenseUri) { } @Override // License 更新成功回调 public void onLicenseUpdateSuccess(@NonNull String licenseUri, @NonNull String licenseId) { } @Override // License 更新失败回调 public void onLicenseUpdateError(@NonNull String licenseUri, @NonNull Exception e, boolean retryAble) { } @Override // License 更新重试回调 public void onLicenseUpdateRetry(@NonNull String licenseUri) { } }) .build()); }
将 CV SDK 文件 effectAAR-release.aar
添加到 app/libs
目录中。
在 app
目录下的 build.gradle
文件中添加以下内容。
android { // 解决 .so 文件的冲突问题 packagingOptions { pickFirst '**/libc++_shared.so' } // 添加依赖 dependencies { implementation(name: 'effectAAR-release', ext: 'aar') } }
将 CV 资源包 resource.zip
添加到 app/src/main/assets
目录中。resource.zip
的内容如下图所示。
说明
ZIP 包的根目录名字为 resource。
完成 CV 授权。您可以选择离线授权或在线授权。
resource.zip
的 LicenseBag.bundle
中,无需额外配置。// 联系技术支持获取您的业务标识和业务密钥。将 KEY 替换为您的业务标识,对应开通的业务类型。将 SECRET 替换为您的业务密钥,业务密钥可在创建业务时同业务标识一起获得 PushSettings.Holder.mSettings.getCvSettings().setOnLineLicenseInfo("KEY","SECRET");
开启 CV 功能。
CVSettings cvSettings = PushSettings.Holder.mSettings.getCvSettings(); // 开启 CV 功能 cvSettings.setEnableCV(true); // 设置 CV 资源包对应的版本号。版本号变大后,SDK 会重新解压 CV 资源包,建议每更新一次 CV 资源包,版本号递增 1 cvSettings.setResourceVersionCode(1); // 设置 CV 资源包在 assets 目录中的路径 cvSettings.setResourceAssetName("resource.zip");
自 SDK 1.39.1 版本开始,您可以按需完成以下操作优化 SDK 的包体积。
在 app
目录下的 build.gradle
文件中,在 dependencies
块中找到开播 SDK 的依赖。
com.bytedance.bdlive:bdlive-push:1.47.1.external
在模块名后加上 -remove-rtc
后缀,即:
com.bytedance.bdlive:bdlive-push-remove-rtc:1.47.1.external
优化包体积后的 SDK 不包含录屏直播功能。