You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们
导航

SDK 集成

最近更新时间2023.09.22 18:11:55

首次发布时间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:32(Android 12)
  • JDK version:1.8.0 及以上
  • 获取直播 License 文件和点播 License 文件、创建 SDK 应用时填写的 App 英文名称以及应用创建后生成的 App ID。详见获取 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)
                }
            }
        } 
    } 
    
  2. 增加以下配置到 app 目录下的 build.gradle 文件。

    android { 
        defaultConfig { 
            minSdkVersion 21 
            ndk { 
                abiFilters "armeabi-v7a","arm64-v8a" 
            } 
        } 
     
     
       // 开启数据绑定
        dataBinding { 
            enabled = true 
        } 
    } 
     
    // 引入所需依赖
    dependencies { 
     
        // 引入观播 SDK。如不需要连麦和超低延时直播功能,则使用 implementation "com.bytedance.bdlive:bdlive-pull-remove-rtc:1.29.0.external" 引入不含连麦和超低延时直播功能的观播 SDK
        implementation "com.bytedance.bdlive:bdlive-pull:1.29.0.external"
     
    } 
    

步骤二:添加权限

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.SYSTEM_ALERT_WINDOW" />

<!-- 录音权限 --> 
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<!-- 摄像头权限 -->
<uses-permission android:name="android.permission.CAMERA" />

<!-- 日历相关权限 --> 
<uses-permission android:name="android.permission.READ_CALENDAR"/> 
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>

步骤三:添加混淆规则

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

步骤四:导入 License

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

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

步骤五:初始化 BDLive SDK

在初始化 Application 的过程中,调用 BDLiveEnv.init 初始化 BDLive SDK,即观播 SDK。

注意

自观播 SDK 1.21.0 版本开始,必须通过初始化 BDLiveEnv 的方式初始化观播 SDK。

private void initBDLiveEnv() {
    String assetsLicenseUri = "assets:///lic/example.lic"; // 将 assets:///lic/example.lic 替换为点播 License 的 URI
    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
        .setVodLicenseUri(assetsLicenseUri) // 点播 License 的 URI
        .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());
}

常见问题

License 鉴权有问题怎么办?

开启 LicenseManager 的 Log 功能,查看日志进行问题排查。如果问题依然存在,请联系企业直播技术支持。

LicenseManager.turnOnLogcat(true);

播放器一直加载怎么办?

通常是由于 License 鉴权失败导致视频无法播放,日志显示播放器错误码为 -30001(LICENSE_FAILED)。请查看直播 License 和点播 License 是否过期,并查看使用的项目包名、App ID 等是否与创建 SDK 应用时填写的信息以及应用创建后生成的信息一致。如果问题依然存在,请联系企业直播技术支持。

tabLayout 兼容性有问题怎么办?

错误信息如下:

AAPT: error: 'start' is incompatible with attribute tabGravity (attr) enum [center=1, fill=0] [weak].

由于工程中使用 tabLayoutstart 属性控制 tabGravity,因此请在 app 目录下的 build.gradle 文件中,增加以下配置升级相关依赖版本:

dependencies {

...
implementation 'com.google.android.material:material:1.2.1'
...
}

因架构或环境原因缺失 .so 文件,导致 App 崩溃怎么办?

So 库目前仅支持 arm64-v8a 和 armeabi-v7a 架构。请在工程 app 目录下的 build.gradle 文件中检查 abiFilters 的配置是否正确。如需支持其他架构,请联系企业直播技术支持。
下图为 armeabi-v7a 架构下的所有 .so 文件。
图片

本地添加 .so 文件后,报错文件重复怎么办?

错误信息如下:

Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.
More than one file was found with OS independent path 'lib/armeabi/xxxx.so'

在工程 app 目录下的 build.gradle 文件中,增加以下配置:

android{
        ...
        packagingOptions {
            pickFirst 'lib/armeabi/xxxx.so'
        }
        ...
    }