2 快速整合
整合前需先在 Polyv 官網 中註冊完畢,並開通雲點播服務。
1. Gradle 配置
1、在 Project 的 build.gradle 檔案中加入 maven仓库:
allprojects {
repositories {
google()
//阿里云的镜像库
maven {url "http://maven.aliyun.com/nexus/content/groups/public/"}
maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}
mavenCentral()
//阿里云效关于central的镜像
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/'
}
}
}
2、在 app 的 build.gradle 檔案中加入 ndk 宣告
android {
...
defaultConfig {
...
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'armeabi', 'x86_64', 'x86'
}
}
...
}
abiFilters 可依實際情況篩選,建議配置為 arm64-v8a、armeabi-v7a、x86。不要僅使用 armeabi,僅使用armeabi可能會在部分機型上出現影音不同步、跳秒播放等異常情況。
3、在 app 的 build.gradle 檔案中加入依賴:
implementation 'com.android.support:support-annotations:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:multidex:1.0.3'
implementation 'net.polyv.android:polyvPlayer:<sdk版本>'//SDK核心包
implementation 'net.polyv.android:polyvDownload:<sdk版本>'//SDK下载功能
implementation 'net.polyv.android:polyvUpload:<sdk版本>'//SDK上传功能
implementation 'net.polyv.android:polyvSub:<sdk版本>'//弹幕、截图功能中使用
implementation 'de.hdodenhof:circleimageview:2.2.0'//圆形imageview,音频封面图使用
implementation 'com.github.bumptech.glide:glide:4.7.1'//demo中的ppt图片加载使用
implementation "com.daimajia.swipelayout:library:1.2.0@aar"//demo中下载列表使用
// 投屏sdk
implementation "net.polyv.android:media-cast-adapter-rx:1.0.5"
SDK 核心包是影片播放必須要使用的包,其他依賴可依實際需求導入。若引入庫過多導致超過64k方法數限制,可參考 Demo 解決方案。
2 配置 AndroidManifest.xml
1、在應用程式的 AndroidManifest.xml 檔案中加入相應權限:
<!-- 基础权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- WRITE_EXTERNAL_STORAGE属于android6.0运行时权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Android 10 起需要精确定位才能获取wifi详细信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
註1:2.18.0以前版本,如需適配Android 11,即targetSdkVersion>=30,需要關閉指標標記功能(Android官方關於指標標記的說明),參考以下程式碼修改AndroidManifest.xml以關閉指標標記。
<application
android:allowNativeHeapPointerTagging="false">
...
</application>
3. 初始化 SDK
3.1 取得 SDK 加密串
SDK加密串在官網 雲點播-設定-API介面 裡面可見。更多說明見 初始化-設定SDK。
注意:保利威後台提供的
SDK加密串只是一種固定的加密方式,僅做演示使用。 對於設定SDK加密串,開發者應使用自己的加密方式,具體可見正式使用解決方案。
3.2 初始化SDK
注意:在整合2.16.5.1及之後的版本,需要在取得用戶隱私授權的前提下,在適當的時機做httpdns啟動。以demo中為例:在PolyvMainActivity 中呼叫 PolyvSDKClient.getInstance().enableHttpDns()方法來啟動httpdns。
PolyvSDKClient.getInstance().enableHttpDns(true);
在應用程式啟動的 Application 的 onCreate() 方法中對 SDK 進行初始化。
//获取 PolyvSDKClient实例
PolyvSDKClient client = PolyvSDKClient.getInstance();
//设置SDK加密串
client.settingsWithConfigString("你的SDK加密串", "加密密钥", "加密向量");
//初始化SDK设置
client.initSetting(getApplicationContext());
//设置学员唯一标识
client.setViewerId("学员唯一标识");
//设置下载保存目录
PolyvSDKClient.getInstance().setDownloadDir("下载视频保存的目录");
4. 影片播放
影片的操作依賴於 VID,VID是影片的唯一識別標誌。影片在後台上傳成功後會自動生成VID 。
PolyvVideoView 是影片播放器的主類。在佈局檔案中宣告並初始化完成後,透過 videoView.setVid(VID) 就可以實現影片的自動播放。
<com.easefun.polyvsdk.video.PolyvVideoView
android:id="@+id/polyv_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
PolyvVideoView videoView = findViewById(R.id.polyv_video_view);
videoView.setVid(vid);
5. 影片下載
下載的影片統一儲存到 PolyvSDKClient.getInstance().setDownloadDir(File)設定的目錄中。若沒有設定將會無法下載儲存。影片下載會根據VID、碼率進行下載。PolyvDownloaderManager 是對影片下載操作的封裝類,可對此進行影片下載的基本操作。
// 设置下载队列总数,多少个视频能同时下载。(默认是1,设置负数和0是没有限制)
PolyvDownloaderManager.setDownloadQueueCount(1);
//获取downloader
PolyvDownloader downloader = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate);
//开始下载
downloader.start(getApplicationContext);
getPolyvDownloader() 方法會將下載影片任務儲存到 Map 中,保證下載任務的唯一。該方法回傳一個 PolyvDownloader 實例,是影片下載的具體實作類,可啟動和關閉具體的下載任務。
