接入之前需要在 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:2.22.1'//SDK核心包
implementation 'net.polyv.android:polyvDownload:2.22.1'//SDK下载功能
implementation 'net.polyv.android:polyvUpload:2.22.1'//SDK上传功能
implementation 'net.polyv.android:polyvSub:2.22.1'//弹幕、截图功能中使用
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自点播2.15.0起不再维护,相关实现已经转移到Demo,详细请查看Wiki-7.视频投屏
// 投屏sdk
implementation files("libs/wx-commonlib-1.0.1.aar")
implementation files("libs/wx-dlnasdk-1.1.5.aar")
implementation files("libs/wx-dlnasender-1.1.5.aar")
implementation files("libs/wx-jettylib-1.0.1.aar")
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
实例,是视频下载的具体实现类,可启动和关闭具体的下载任务。