准备工作
- 屏幕保持常亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- 设置观看布局
<RelativeLayout
android:id="@+id/rl_container"
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) {
}
});
初始化看直播实例:
WatchLive watchLive;
WatchLive.Builder builder = new WatchLive.Builder()
.context(watchView.getActivity().getApplicationContext())
.containerLayout(containview) /**传入观看布局*/
.bufferDelay(6)/**缓冲几秒的BUFFER*/
.callback(new WatchCallback())/**观看回调*/
.messageCallback(new MessageEventCallback()) /**连接消息服务器*/
.connectTimeoutMils(5000)//连接超时,时长
.chatCallback(new ChatCallback());/**使用聊天功能就加上*/
watchLive = builder.build();
设置视频适配模式
watchLive.setScaleType(Constants.DrawMode.kVHallDrawModeAspectFit.getValue());
开始播放
watchLive.setWebinarInfo(webinarInfo);//将房间信息传给播放器
watchLive.start();
分辨率切换
可用分辨率以播放器回调返回的分辨率列表为准:事件码EVENT_DPI_LIST
分辨率(String) |
描述 |
same |
原画 |
360p |
标清 |
480p |
高清 |
720p |
超清 |
a |
纯音频 |
watchLive.setDefinition(dpi);
停止观看
watchLive.stop();
销毁播放器
watchLive.release();
观看事件回调
/**
* 观看过程中事件监听
*/
private class WatchCallback implements VHPlayerListener {
@Override
public void onStateChanged(com.vhall.player.Constants.State state) {
switch (state) {
case START://开始播放
break;
case BUFFER://数据缓冲
break;
case STOP://停止播放
break;
}
}
@Override
public void onEvent(int event, String msg) {
switch (event) {
case com.vhall.player.Constants.Event.EVENT_DOWNLOAD_SPEED://下载速率 kb/s
break;
case com.vhall.player.Constants.Event.EVENT_DPI_CHANGED:
//分辨率切换
break;
case com.vhall.player.Constants.Event.EVENT_DPI_LIST:
//支持的分辨率 msg,返回数据类型JSONArray
break;
case com.vhall.player.Constants.Event.EVENT_VIDEO_SIZE_CHANGED:
break;
case com.vhall.player.Constants.Event.EVENT_STREAM_START:
//发起端开始推流 Flash直播有效,H5直播在消息监听中获取
break;
case com.vhall.player.Constants.Event.EVENT_STREAM_STOP:
//发起端停止推流 Flash直播有效,H5直播在消息监听中获取
break;
}
}
@Override
public void onError(int errorCode, int innerCode, String msg) {
switch (errorCode) {
case Constants.ErrorCode.ERROR_CONNECT:
//连接错误
break;
default:
//其他错误
break;
}
}
}
事件码 |
描述 |
EVENT_DPI_LIST |
当前是视频支持的分辨率 |
EVENT_DPI_CHANGED |
视频分辨率改变 |
EVENT_URL |
视频地址 |
EVENT_DOWNLOAD_SPEED |
拉流速率 |
EVENT_VIDEO_SIZE_CHANGED |
视频大小改变 |
EVENT_STREAM_START |
发起端开始推流(Flash活动有效) |
EVENT_STREAM_STOP |
发起端停止推流(Flash活动有效) |
接口错误码说明
错误码 |
描述 |
10030 |
身份验证出错 |
10402 |
当前活动ID错误 |
10049 |
访客数据信息不全 |
10404 |
KEY值验证出错 |
10046 |
当前活动已结束 |
10405 |
微吼用户ID出错 |
10047 |
您已被踢出,请联系活动组织者 |
10048 |
活动现场太火爆,已超过人数上限 |
10410 |
用户信息不存在 |