# 播放器 Android SDK
# 简介
SDK 支持播放视频、音频、Word/PDF文档、静态PPT4种类型的资源播放。其中,视频中支持倍速播放、切换清晰度,水印、指纹等基本视频播放功能
# 开发环境要求
- Java 1.8
- Android Studio 3.4.2 及以上
- 最低支持Android 4.3 运行环境
# 快速集成
在工程根目录下build.gradle
中添加以下引用地址:
maven {
url "https://raw.github.com/codeages/maven/master/"
}
在libraray的build.gradle
中添加Java 1.8:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
在libraray的build.gradle
中添加gradle依赖:
implementation 'com.edusoho.cloud:player:1.0.4-SNAPSHOT'
# 混淆
-keep class com.edusoho.cloud.** { *; }
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
# 开发指南
# Layout布局中插入播放器
<com.edusoho.cloud.player.view.ResourcePlayer
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="300dp" />
# 实例化播放器
ResourcePlayer resourcePlayer = findViewById(R.id.player);
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo) //设置资源
.setToken(token) //设置token
.setRememberLastPos(true) //设置是否跳转至上次观看位置继续
.setInitPos(59) //设置资源播放的初始位置
.setDefinition(ResourceDefinition.SHD) //设置播放器初始化清晰度
.addPlayerEventListener(mPlayerEventListener) //设置播放器回调事件
.build();
resourcePlayer.load(param);
# PlayerParam 通用参数
# setResNo(String resNo)
- 类型:String
- 必填:是
- 描述:设置云资源唯一编号。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.build();
resourcePlayer.load(param);
# setToken(String token)
- 类型:String
- 必填:否,1.在线播放必须;2.离线播放可不设置。
- 描述:设置云资源播放令牌。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.build();
resourcePlayer.load(param);
# setRememberLastPos(boolean rememberLastPos)
- 类型:boolean
- 必填:否
- 描述:设置是否跳转至上次观看位置继续。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setRememberLastPos(rememberLastPos)
.build();
resourcePlayer.load(param);
# setInitPos(int initPos)
- 类型:int
- 必填:否
- 描述:设置资源播放的初始位置,如:ppt 的第三页,云文档的第 3 页,云视频的第 3 秒。
- 备注:如setRememberLastPos和setInitPos同时设置,此时setRememberLastPos无效。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setInitPos(initPos)
.build();
resourcePlayer.load(param);
# PlayerParam 视频参数
# setDefinition(ResourceDefinition resourceDefinition)
- 参数:ResourceDefinition,详见参数说明
- 必填:否
- 描述:设置默认视频播放时的清晰度,如未找到指定清晰度,则按低一级清晰度播放。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setDefinition(ResourceDefinition.SHD)
.build();
resourcePlayer.load(param);
# setWatermarkUrl(String url)
- 参数:url,水印地址
- 必填:否
- 描述:设置播放器水印
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setWatermarkUrl(url)
.build();
# setWatermarkDrawable(Drawable drawable, int width, int height, WatermarkLocation location)
- 参数:水印Drawable
- 必填:否
- 描述:设置播放器水印。
- 用法:
- 说明:如果播放器同时设置了setWatermarkDrawable和setWatermarkUrl,则setWatermarkDrawable会失效。
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setWatermark(drawable)
.build();
# setWatermarkWidth(int width)
- 参数:width宽度
- 必填:否,默认200
- 描述:设置播放器水印宽度。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setWatermarkWidth(200)
.build();
# setWatermarkHeight(int height)
- 参数:height高度
- 必填:否,默认80
- 描述:设置播放器水印高度。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setWatermarkHeight(200)
.build();
# setWatermarkLocation(WatermarkLocation location)
- 参数:location,详见参数说明。
- 必填:否,默认左下
- 描述:设置播放器水印位置。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setWatermarkLocation(WatermarkLocation.TOP_RIGHT)
.build();
# setFingerprint(String fingerprint, int showUpTimes)
- 类型:String fingerprint,int showUpTimes(毫秒)。
- 必填:否
- 描述:设置播放器指纹,播放器指纹是随机显示在播放器上的一段文字fingerprint,间隔是10s~20s随机,开发者可以设置每次停留在播放器的时间showUpTimes(毫秒)。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.setFingerprint("your fingerprint", 2*1000)
.build();
# 播放器基本方法
基本方法是所有资源类型通用的方法。
# load(PlayerParam param)
- 类型:PlayerParam,详见参数说明。
- 描述:播放器加载资源。
- 用法:
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.build();
resourcePlayer.load(param);
# 按时间单位播放的资源方法
以下方法适用于视频、音频等按时间单位播放的资源类型。
# play()
- 描述:开始播放,一般用于pause之后。
- 用法:
resourcePlayer.play();
# pause()
- 描述:音视频暂停。
- 用法:
resourcePlayer.pause();
# isPlaying()
- 描述:播放器是否正在播放。
- 用法:
resourcePlayer.isPlaying();
# seekTo(int position)
- 参数:position,秒。
- 描述:音视频跳转到 XX 时间点。
- 用法:
// 跳转到播放器的第10秒时间点
resourcePlayer.seekTo(10);
# setSpeed(float speed)
- 参数:speed,播放倍数。
- 描述:音视频跳转到 XX 时间点。
- 用法:
//设置播放器1.5倍速度播放
resourcePlayer.setSpeed(1.5f));
# getCurrentPosition
- 描述:获取音视频当前时间点。
- 返回:当前播放时间点,单位:秒。
- 用法:
resourcePlayer.getCurrentPosition();
# getBufferedPosition
- 描述:获取音视频获取缓冲位置。
- 返回:播放缓冲时间点,单位:秒。
- 用法:
resourcePlayer.getBufferedPosition();
# getDuration
- 描述:获取音视频时间总长度。
- 返回:总时长,单位:秒。
- 用法:
resourcePlayer.getDuration();
# switchPlaylist
- 描述:支持视频资源切换音频,音频切回视频。
- 返回:void
- 用法:
resourcePlayer.switchPlaylist();
# switchDefinition
- 参数:ResourceDefinition,详见参数说明。
- 描述:视频清晰度切换,如未找到指定清晰度,则按低一级清晰度播放。
- 返回:void
- 用法:
resourcePlayer.switchDefinition(ResourceDefinition.SHD);
# 按页播放的资源方法
以下方法适用于Word/PDF文档、静态PPT、动画PPT等以页为单位播放的资源类型。
# prevPage()
- 描述:下一页
- 用法:
resourcePlayer.prevPage();
# nextPage()
- 描述:上一页
- 用法:
resourcePlayer.nextPage();
# setCurrentPage(int page)
- 参数:page
- 描述:设置当前播放页
- 用法:
resourcePlayer.setCurrentPage(5);
# 4.8 播放器通用回调事件
# onPrepared
通用回调,适用于所有资源类型。
- 参数:metas,所有资源相关的数据
- 描述:播放器加载资源完成,回调事件。
- 用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onPrepared(String metas) {
// do something
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# onError
通用回调,适用于所有资源类型。
- 参数:ResourceError,错误类型,详见参数说明。
- 描述:请求资源出错
- 用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onError(ResourceError error) {
Log.e("qiqiuyun-player", "Error Code: " + error.getCode());
Log.e("qiqiuyun-player", "Error Message: " + error.getMessage());
Log.e("qiqiuyun-player", "Error TraceId: " + error.getTraceId());
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# 按时间播放资源类型回调事件
# #onVideoPrepared
仅用于视频资源。
- 参数:
List<ResourceDefinition>
,清晰度列表。 - 描述:视频资源加载成功以后,回调返回resources为视频清晰度列表。获取资源的清晰度。
- 用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onVideoPrepared(List<ResourceDefinition> resources) {
// do something
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# onSwitchPlaylistPrepared
仅用于视频资源,视频转音频功能中使用。
- 参数:playlistType, 当前切换的音视频类型。
- 描述:视频转音频以后,回调返回参数:playlistType,切换后的音视频类型。
- 用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onSwitchPlaylistPrepared(String playlistType) {
// do something
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# onPlayerStateChanged
仅用于音、视频资源。
参数
playWhenReady
:true 表示播放器准初始化完成,反之亦然参数
playbackState
:播放器播放状态,目前支持4种状态:STATE_IDLE
:播放器空闲。STATE_BUFFERING
:播放器缓冲。STATE_READY
:播放器准备播放,如果设置了position就从设置的开始播放。STATE_ENDED
:播放结束。
描述:播放音、视频资源时,播放器状态改变回调,开发者可以针对这些播放器状态处理自己的业务。
用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState) {
case PlayerState.STATE_IDLE:
// do something
break;
case PlayerState.STATE_BUFFERING:
// do something
break;
case PlayerState.STATE_READY:
// do something
break;
case PlayerState.STATE_ENDED:
// do something
break;
}
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# 按页播放资源类型回调事件
# onPageChanged(int page, int total)
仅用于按页播放的资源事件。
- 参数:page,当前页;total,总页数。
- 描述:资源页面改变时回调。
- 用法:
PlayerEventListener mPlayerEventListener = new PlayerEventListener() {
@Override
public void onPageChanged(int page, int total) {
// do something
}
};
PlayerParam.Builder builder = new PlayerParam.Builder();
PlayerParam param = builder.setResNo(resNo)
.setToken(token)
.addPlayerEventListener(mPlayerEventListener)
.build();
resourcePlayer.load(param);
# 参数说明
# WatermarkLocation 水印位置
public enum WatermarkLocation {
TOP_LEFT, //左上
TOP_RIGHT, //右上
BOTTOM_LEFT, //左下
BOTTOM_RIGHT,//右下
}
# ResourceDefinition 视频清晰度
public enum ResourceDefinition {
SHD, //标清
HD, //高清
SD //超清
}
# ResourceError 错误信息
public class ResourceError {
int code;
String message;
String traceId;
}