准备工作

  1. 屏幕保持常亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  1. 设置观看布局
<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 用户信息不存在