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

集成 Android 开播 SDK

最近更新时间2024.05.24 14:55:00

首次发布时间2022.02.24 19:18:57

开播 SDK 提供录屏直播和视频直播两大功能。本文介绍如何将开播 SDK 集成到您的 Android App 中。

前提条件

  • 您已开通旗舰版或定制版套餐。详见计费说明
  • 安装 Android Studio,建议使用 4.0 及以上版本。
  • Android 5.0(API 级别 21)及以上版本的真机。
  • CPU 架构:armeabi-v7a 或 arm64-v8a。
  • 仅支持 AndroidX 库。
  • minSdkVersion:21(Android 5.0)及以上。
  • targetSdkVersion:minSdkVersion 及以上、32(Android 12)及以下。
  • JDK version:1.8.0 及以上。
  • 获取直播 License 文件、创建 SDK 应用时填写的 App 英文名称以及应用创建后生成的 App ID。详见获取 License
  • 如果您需要使用美颜和特效功能,联系企业直播技术支持获取计算机视觉(CV)SDK 4.2.3 版本、License 和资源包。

集成步骤

步骤一:配置 Gradle

  1. 增加以下配置到项目根目录下的 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 的本地目录
            } 
        } 
    } 
    
  2. 增加以下配置到 app 目录下的 build.gradle 文件。

    android { 
        defaultConfig { 
            minSdkVersion 21 
            ndk { 
                abiFilters "armeabi-v7a","arm64-v8a" 
            } 
        } 
      
        packagingOptions { 
            pickFirst '**/libc++_shared.so' 
        } 
     
       // 开启数据绑定
        dataBinding { 
            enabled = true 
        } 
    } 
     
    // 引入所需依赖
    dependencies { 
     
        // 引入开播 SDK
        implementation "com.bytedance.bdlive:bdlive-push:1.30.0.external"
     
        // 引入 Glide 图片库。如果项目已经引入 Glide 图片库,请查看 Glide 版本兼容性章节确保 Glide 版本兼容
        implementation "com.github.bumptech.glide:glide:4.15.1" 
    } 
    

Glide 版本兼容性

自开播 SDK 1.29.0 版本开始,依赖的图片库组件已迁移至 Glide。Glide 不同版本的 API 存在较大差异,为避免由于调用不同版本的 API 导致崩溃,请参考以下内容确保 Glide 版本兼容性。项目引入的 Glide 版本不同,确保兼容性的方法也不同。

  • Glide 版本大于等于 4.9.0:无需额外操作。
  • Glide 版本为小于 4.9.0 的 4.x:打开项目 app 目录下的 build.gradle 文件并增加以下配置。
    // 引入开播 SDK
    implementation("com.bytedance.bdlive:bdlive-pull: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.2.external"
    

说明

开播 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.**{*;}

步骤四:导入 License

app/src/main 目录下,创建 assets/lic 目录并把获取到的直播 License 文件 liveLicense.lic 放到 assets/lic 目录下。文件结构如下:

app
|-- src
    |-- main
        |-- java
        |-- assets
            |-- lic
                |--  liveLicense.lic

步骤五:初始化 BDLive SDK

在初始化 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
        .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 功能

  1. 将 CV SDK 文件 effectAAR-release.aar 添加到 app/libs 目录中。

  2. app 目录下的 build.gradle 文件中添加以下内容。

    android {
         // 解决 .so 文件的冲突问题
         packagingOptions {
            pickFirst '**/libc++_shared.so'
        }
        // 添加依赖
        dependencies {
            implementation(name: 'effectAAR-release', ext: 'aar')
        } 
    }
    
  3. 将 CV 资源包 resource.zip 添加到 app/src/main/assets 目录中。resource.zip 的内容如下图所示。
    图片

    说明

    ZIP 包的根目录名字为 resource。

  4. 完成 CV 授权。您可以选择离线授权或在线授权。

    • 离线授权:如果选择离线授权,CV License 在 CV 资源包 resource.zipLicenseBag.bundle 中,无需额外配置。
    • 在线授权:如果选择在线授权,需在代码中设置在线授权所需的 key 和 secret。
      // 联系技术支持获取您的业务标识和业务密钥。将 KEY 替换为您的业务标识,对应开通的业务类型。将 SECRET 替换为您的业务密钥,业务密钥可在创建业务时同业务标识一起获得
      PushSettings.Holder.mSettings.getCvSettings().setOnLineLicenseInfo("KEY","SECRET");
      
  5. 开启 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");