保利威文档中心

幫助中心

2-快速集成

更新時間:2024-08-27 10:18:19

1 閱讀準備

請先下載保利威多場景 Demo。

準備一個保利威帳號,Demo 中登入直播需要帳號直播系統中的 appId(應用程式 ID)、appSecret(應用程式密鑰)、userId(帳號 ID)、channelId(頻道號碼),登入回放則需額外提供頻道號碼對應回放列表中的 vid(回放影片 ID)。

2 環境需求

名稱 需求
minSdkVersion >=21 (Android 5.0)
targetSdkVersion 27 (Android 8.1)
abiFilters arm64-v8a、armeabi-v7a、x86
jdk version >=1.8.0
整合工具 Android Studio

註1:開發者如需相容 minSdkVersion >= 16 (Android 4.1 裝置),請依照 OkHttp4.x 版本降級到 3.x 相容方案處理。

註2:若要相容 targetSdkVersion 至 28,需在 AndroidManifest.xml 檔案中加入 android:usesCleartextTraffic="true"。

註3:so 庫的設定僅能使用 [arm64-v8a、armeabi-v7a、x86] 中的一種或多種,否則可能在某些機型上出現崩潰或影音不同步、跳秒播放等情況。

註4:如需將 targetSdkVersion 設為 29 或以上,且需存取手機外部儲存公共目錄下的檔案,需在 AndroidManifest 中宣告 requestLegacyExternalStorage

  <application
    android:requestLegacyExternalStorage="true">
    ...
  </application>

註5:如需將 targetSdkVersion 設為 30 或以上,且需存取手機外部儲存公共目錄下的檔案,需在 AndroidManifest 中宣告管理外部儲存權限 android.permission.MANAGE_EXTERNAL_STORAGE

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

並且需要在執行時動態判斷是否已取得該權限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (!Environment.isExternalStorageManager()) {
        Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
        activity.startActivity(intent);
    }
}

註6:1.7.2 及之前版本,如需將 targetSdkVersion 設為 30 或以上,需關閉指標標記功能(Android 官方關於指標標記的說明),請參考以下程式碼修改 AndroidManifest.xml 以關閉指標標記。

  <application
    android:allowNativeHeapPointerTagging="false">
    ...
  </application>

3 目錄結構

模組名稱 作用
demo 示範如何初始化 SDK,以及登入直播/回放及進入不同場景
polyvLiveCloudClassScene 雲端課堂場景模組,包含播放、聊天、連線麥克風、互動等功能示範
polyvLiveEcommerceScene 直播帶貨場景模組,包含播放、聊天、商品、打賞等功能示範
polyvLiveStreamerScene 手機開播場景模組,包含推流、連線麥克風、聊天、文件等功能示範
polyvStreamerAloneScene 純影片開播場景模組,包含推流、連線麥克風、聊天等功能示範
polyvLiveCommonModul 通用模組,提供各場景實作所需依賴的基礎庫、工具類等

4 場景模組整合

4.1 導入通用模組(必要)

複製 polyv demo 專案中的 polyvLiveCommonModul 模組至您專案的根目錄下,接著開啟您專案的 settings.gradle 檔案,加入以下程式碼:

include ':polyvLiveCommonModul'

4.2 雲端課堂場景模組整合(選用)

複製 polyv demo 專案中的 polyvLiveCloudClassScene 模組至您專案的根目錄下,接著開啟您專案的 settings.gradle 檔案,加入以下程式碼:

include ':polyvLiveCloudClassScene'

4.3 直播帶貨場景模組整合(選用)

複製 polyv demo 專案中的 polyvLiveEcommerceScene 模組至您專案的根目錄下,接著開啟您專案的 settings.gradle 檔案,加入以下程式碼:

include ':polyvLiveEcommerceScene'

4.4 手機開播場景模組整合(選用)

複製 polyv demo 專案中的 polyvLiveStreamerScene 模組至您專案的根目錄下,接著開啟您專案的 settings.gradle 檔案,加入以下程式碼:

include ':polyvLiveStreamerScene'

4.5 純影片開播場景模組整合(選用)

複製 polyv demo 專案中的 polyvStreamerAloneScene 模組至您專案的根目錄下,接著開啟您專案的 settings.gradle 檔案,加入以下程式碼:

include ':polyvStreamerAloneScene'

5 專案設定

5.1 設定模組編譯版本

開啟您專案的 build.gradle 檔案,加入以下程式碼:

ext {
    compileSdkVersion = 27
    minSdkVersion = 16
    targetSdkVersion = 27
}

5.2 設定 Maven 位址

開啟您專案的 build.gralde 檔案,加入以下程式碼:

allprojects{
     repositories {
        maven { url "https://jitpack.io" }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }
        mavenCentral()
        maven { url 'https://maven.aliyun.com/repository/public' }
        // 保利威阿里云效
        maven {
            credentials {
                username '609cc5623a10edbf36da9615'
                password 'EbkbzTNHRJ=P'
            }
            url 'https://packages.aliyun.com/maven/repository/2102846-release-8EVsoM/'
        }
     }
}

5.3 設定 abiFilters

開啟您專案的 app/build.gradle 檔案,加入以下程式碼:

//依赖的包可能支持很多类型的ABI
//为了避免打包了我们没有支持的ABI,指定需要打包的ABI目录
ndk {
    abiFilters 'arm64-v8a', "armeabi-v7a", "x86"
}

5.4 設定 sdkVersion

開啟您專案的 app/build.gradle 檔案,將其中的 minSdkVersion 設為 21 或以上,將 targetSdkVersion 設為 27 或以下。

若要相容 minSdkVersion 為 16,請參考 OkHttp4.x 版本降級到 3.x 相容方案處理。

若要相容 targetSdkVersion 至 28,需在 AndroidManifest.xml 檔案中加入 android:usesCleartextTraffic="true"

5.5 設定 renderScript

RenderScript 在 polyv demo 專案中用於高斯模糊背景,demo 為相容至 API 16,使用了 support 套件中的 RenderScript。如果您專案的 minSdkVersion 為 16,且需要使用高斯模糊功能,則需在 app/build.gradle 檔案中加入以下設定:

renderscriptSupportModeEnabled true

如果您專案的 minSdkVersion大于 不為 16,或不需要使用 polyv 專案 demo 中的高斯模糊功能,則需執行以下操作:

1、移除polyvLiveCommonModul模块中build.gradle文件的renderscriptSupportModeEnabled true配置
2、移除polyvLiveCommonModul模块中SupportRenderScriptBlur类
3、把polyvLiveCommonModul模块中PLVBlurUtils类中的SupportRenderScriptBlur修改为RenderScriptBlur

5.6 設定方法數超過 64K 的應用程式

如果您專案的 minSdkVersion 設為 21 或更高,預設情況下會啟用 MultiDex,且您不需要 MultiDex 支援庫。

否則請參考設定方法數超過 64K 的應用程式中的方式加入 MultiDex。

6 初始化 SDK

開啟您專案的 Application 類別,在 onCreate 方法中加入以下程式碼:

PLVLiveSDKConfig.init(
        new PLVLiveSDKConfig.Parameter(this)//sdk初始化所需参数
                .isOpenDebugLog(true)//是否打开调试日志
                .isEnableHttpDns(false)//是否使用httpdns
);

7 登入直播/回放及進入不同場景

7.1 觀看端(雲端課堂場景/直播帶貨場景)

進入不同場景的觀看頁面前,需先呼叫登入直播/回放的方法進行驗證。登入驗證的目的是檢查參數是否正確,以及 SDK 內部會儲存從登入介面取得的一些資訊。SDK 提供了 IPLVSceneLoginManager 進行直播/回放的登入,介面定義如下:

 /**
   * 登陆直播观看
   *
   * @param appId         直播账号appId
   * @param appSecret     直播账号appSecret
   * @param userId        直播账号userId
   * @param channelId     频道号
   * @param loginListener 监听器
   */
    void loginLiveNew(String appId,
                      String appSecret,
                      String userId,
                      String channelId,
                      OnLoginListener<PLVLiveLoginResult> loginListener);

 /**
   * 登陆回放观看
   *
   * @param appId         直播账号appId
   * @param appSecret     直播账号appSecret
   * @param userId        直播账号userId
   * @param channelId     频道号
   * @param videoId       视频id
   * @param loginListener 监听器
   */
    void loginPlaybackNew(String appId,
                          String appSecret,
                          String userId,
                          String channelId,
                          String videoId,
                          OnLoginListener<PLVPlaybackLoginResult> loginListener);

登入驗證的結果會透過監聽器的方法回呼,可以在登入成功的回呼中,選擇進入所需的場景頁。以下範例說明如何登入直播及進入場景頁,程式碼如下:

//登录直播
loginManager.loginLiveNew(appId, appSecret, userId, channelId, new IPLVSceneLoginManager.OnLoginListener<PLVLiveLoginResult>() {
            @Override
            public void onLoginSuccess(PLVLiveLoginResult plvLiveLoginResult) {
                loginProgressDialog.dismiss();
                PLVLiveChannelConfigFiller.setupAccount(userId, appId, appSecret);
                PLVLiveChannelType channelType = plvLiveLoginResult.getChannelTypeNew();
                switch (curScene) {
                    //进入云课堂场景
                    case CLOUDCLASS:
                        PLVLaunchResult launchResult = PLVLCCloudClassActivity.launchLive(PLVLoginWatcherActivity.this, channelId, channelType, getViewerId(), getViewerName(), getViewerAvatar());
                        break;
                    //进入直播带货场景
                    case ECOMMERCE:
                         PLVLaunchResult launchResult = PLVECLiveEcommerceActivity.launchLive(PLVLoginWatcherActivity.this, channelId, channelType, getViewerId(), getViewerName(), getViewerAvatar());
                        break;
                    default:
                        break;
                }
            }

            @Override
            public void onLoginFailed(String msg, Throwable throwable) {
                //...
            }
        });

上述方法的具體使用範例可在 polyv demo 專案中的 PLVLoginActivity 類別找到。

7.2 開播端(手機開播場景)

在進入手機開播頁面前,需先呼叫登入頻道的方法進行驗證。登入驗證的目的是檢查參數是否正確,以及 SDK 內部會儲存從登入介面取得的一些資訊。SDK 提供了 IPLVSceneLoginManager 進行頻道開播的登入,介面定義如下:

/**
  * 登录手机开播
  *
  * @param channelId     频道号
  * @param pwd           频道密码
  * @param loginListener 监听器
  */
   void loginStreamerNew(String channelId,
                          String pwd,
                          OnLoginListener<PLVLoginVO> loginListener);

登入驗證的結果會透過監聽器的方法回呼,可以在登入成功的回呼中,進入手機開播場景。以下範例說明如何登入頻道並進入手機開播場景,程式碼如下:

loginManager.loginStreamerNew(channelId, password, new IPLVSceneLoginManager.OnStringCodeLoginListener<PLVSLoginVO>() {
    @Override
    public void onLoginSuccess(PLVSLoginVO loginVO) {
        // 其它处理
        // 进入手机开播场景
        PLVLaunchResult launchResult = PLVSAStreamerAloneActivity.launchStreamer(
                                            PLVLoginStreamerActivity.this,
                                            loginVO.getChannelId(),
                                            loginVO.getInteractUid(),
                                            loginNick,
                                            loginVO.getTeacherAvatar(),
                                            loginVO.getTeacherActor(),
                                            loginVO.getChannelName(),
                                            loginVO.getRole(),
                                            loginVO.getColinMicType()
                                    );
    }
    @Override
    public void onLoginFailed(String msg, Throwable throwable) {
        // 登录失败的处理
    }
   @Override
    public void onLoginFailed(String msg, String code, Throwable throwable) {
      // 登录失败的处理
    }
});

上述方法的具體使用範例可在 polyv demo 專案中的 PLVLSLoginStreamerActivity 類別找到。

联系客服,在线咨询