2-快速集成
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 類別找到。
