准备工作
- 屏幕保持常亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- 设置观看布局
<!--封装TextureView 支持截屏,内置水印浮层-->
<com.vhall.player.vod.VodPlayerView
android:id="@+id/rl_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--仅用于视图渲染-->
<SurfaceView
android:id="@+id/rl_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
看回放
初始化房间信息:
参数字段 |
描述 |
id |
活动ID(9位) |
email |
唯一标识 |
nickname |
用户名 |
password |
K值 |
status |
活动状态 |
WebinarInfoDataSource.LoadWebinarInfoCallback |
返回房间信息回调 |
备注:如果email和nickname为空,则必须登陆,如果不登录,则email和nickname不能为空,如果都传,默认取登陆信息。
VhallSDK.initWatch(params.watchId, customeId, customNickname, params.key, watchType, new WebinarInfoDataSource.LoadWebinarInfoCallback() {
@Override
public void onWebinarInfoLoaded(String jsonStr, WebinarInfo webinarInfo) {
//jsonStr 原始数据返回, webinarInfo 解析后的房间信息封装
}
@Override
public void onError(int errorCode, String errorMsg) {
}
});
初始化播放器实例:
WatchPlayback watchPlayback;
WatchPlayback.Builder builder = new WatchPlayback.Builder()
.context(watchView.getActivity())
.vodPlayView(playbackView.getVideoView())/**需要截屏,添加浮层时使用*/
// .surfaceView(playbackView.getVideoView())//与vodPlayerView 2选1即可
.callback(new WatchCallback())
.docCallback(new DocCallback());/**如果使用文档,加此回调*/
watchPlayback = builder.build();
}
开始播放
watchPlayback.start();
设置缩放模式
缩放类型 |
描述 |
Constants.VideoMode.DRAW_MODE_NONE |
原始大小 |
Constants.VideoMode.DRAW_MODE_FIT |
等比缩放居中 |
Constants.VideoMode.DRAW_MODE_FILL |
等比拉伸居中 |
watchPlayerback.setScaleType(type);
暂停播放
watchPlayback.pause();
停止播放
watchPlayback.stop();
销毁播放器释放资源
watchPlayback.releasePlayer();
获取播放进度
watchPlayback.seekTo(playerCurrentPosition);
获取当前播放进度
watchPlayback.getCurrentPosition();
获取播放时长:
watchPlayback.getDuration();
是否正在播放
watchPlayback.isPlaying();
设置倍速播放(推荐使用0.5-2倍速)
watchPlayback.setSpeed(float speed);
回放事件回调
private class WatchCallback implements VHPlayerListener {
@Override
public void onStateChanged(Constants.State state) {
switch (state) {
case IDLE://待机状态
break;
case START://播放中
break;
case BUFFER://缓冲中
break;
case STOP://停止(等同PAUSE 可调用resume方法恢复播放)
break;
case END://播放结束(内容播放结束,恢复时默认从初始位置开始)
break;
}
}
@Override
public void onEvent(int event, String msg) {
switch (event) {
case Constants.Event.EVENT_DPI_LIST:
/** 服务器支持的视频分辨率列表*/
break;
case Constants.Event.EVENT_DPI_CHANGED:
/** 分辨率被切换为msg*/
break;
}
}
@Override
public void onError(int errorCode, int innerErrorCode, String msg) {
switch (errorCode) {
case Constants.ErrorCode.ERROR_INIT:
/** 初始化错误*/
break;
case Constants.ErrorCode.ERROR_INIT_FIRST:
/** 未初始化*/
break;
}
}
}
播放器状态码
状态 |
描叙 |
IDLE |
待机(PREPARING) |
START |
开始播放(STATE_READY) |
BUFFER |
正在缓冲 |
STOP |
停止播放(等同PAUSE 可调用resume方法恢复播放) |
END |
播放结束 |
播放器事件码
事件(Constants.Event) |
描叙 |
EVENT_INIT_SUCCESS |
初始化成功(仅H5播放器触发) |
EVENT_DPI_LIST |
支持的分辨率列表 |
EVENT_DPI_CHANGED |
视频分辨率改变(网络变化可能引起分辨率自动切换) |
错误码
错误码 |
描述 |
-1 |
未初始化视频信息 |
-2 |
初始化视频信息错误 |