获取直播功能信息

聊天和问答需要获取用户标识与头像,需提前使用第三方创建用户接口创建用户,如传入的第三方用户信息未匹配到用户标识,将自动进行创建,并默认为游客以及使用微吼的默认头像。目前聊天和问答模块只支持观看端,如需要进行管理操作(禁言、踢出、过滤以及回答等功能),请前往微吼平台上进行操作

主要调用API

tips: 蓝色标注为最新版本新增方法

API 说明 返回内容
getRoominfo() 获取当前活动状态 活动相关的状态信息,其中layout字段为直播模式2音频直播,3视频直播,4互动直播
queryRoominfo() 获取当前活动状态 和getRoominfo唯一的不同是queryRoominfo会实时请求接口或者最新信息v2.6.4开始支持
getUserinfo() 获取当前用户参会信息 用户参会的信息
player.setPlayerLine(name) playerReady之后,设置播放线路,值来自于canPlayLines事件中的msg的键 切换播放线路(2.5.0版本之后不再进行支持,程序将自动调度)
player.playSpeed(value) playerReady之后,设置播放速度value(0.5,1, 1.5, 2),1表示正常倍速度,2表示2倍速度 切换视频播放清速度(2.5.0版本之后开始支持)
player.getSpeedList() playerReady之后,获取当前可支持的倍速列表 返回数据为数组(2.5.0版本之后开始支持)
player.openBarrage() playerReady之后,打开弹幕 弹幕开关打开之后可以发送弹幕(2.5.0版本之后开始支持)
player.sendAddBarrage(text) playerReady之后,发送弹幕 text为要发送的弹幕文字(2.5.0版本之后开始支持)
player.closeBarrage() playerReady之后,关闭弹幕 弹幕开关关闭之后不可以看到弹幕(2.5.0版本之后开始支持)
player.setPlayerDefinition(name) playerReady之后,设置播放清晰度,值来自于canPlayDefinitions事件中的msg的键 切换播放器的清晰度,默认是“原画”,建议使用api切到“高清”
player.play() 视频播放方法 调用之后视频开始播放
player.pause() 暂停播放方法 调用之后视频暂停播放
player.destory() 播放器销毁方法 调用之后播放器容器内dom将被移除
sendChat({text:' '}) 聊天消息发送,text:消息文本,长度限制为140个字符,返回值为已发送消息 组装好的聊天数据
sendQuestion({text:' '}) 提问问题发送,text:问题文本,长度限制为140个字符 组装好的提问数据
vhall_get_live_history_chat_msg() 获取直播聊天历史记录 请求后触发事件vhall_live_history_chat_msg; v2.6.3开始支持Promise返回
vhall_get_live_history_question_msg() 获取直播问答记录 请求后触发事件getQuestionList; v2.6.3开始支持Promise返回
vhall_get_history_question_msg() 获取直播,回放问答记录 (推荐使用,版本2.4.0新增) 请求后触发事件getQuestionList; v2.6.3开始支持Promise返回
vhall_get_record_history_chat_msg(curr_page) 回放拉取历史聊天,curr_page:需拉取数据的页数,每页20条 v2.6.3开始支持Promise返回
vhall_get_history_notice(curr_page) 获取历史直播公告记录,curr_page:需拉取数据的页数,默认值为1,每页20条 v2.6.3开始支持Promise返回
sendSign(签到ID) 发送签到请求,值来自于startSign事件中的msg的消息体sign_id
sendCustomEvent(data) 发送用户自定义广播消息,data类型为object,可自定义,如{type:'xxx_event',data:{id:1,name:'test'}},data大小限制为JSON字符串长度不能大于200
updateUserInfo(username) 根据传入的参数值更新当前用户昵称,参数值长度小于30
sendQuestionPagerAnswer() 发送问卷答案,使用方法见下面 “主要代码实例”, 省市对应编号见下方链接
sendLotteryInfo(param) @param(对象),发送中奖信息 { lottery_id:'抽奖id', name:'中奖人姓名',phone:'手机号', remarks:'备注' }
destroy 单页应用使用,销毁方法,此方法会断开消息通讯(聊天,通知)
docZoomIn() H5文档放大
docZoomOut() H5文档缩小
docZoomReset() H5文档重置大小
docMove() H5文档移动
docNextPage() H5文档下一页 只对文档生效,对白板不生效
docPrevPage() H5文档上一页 只对文档生效,对白板不生效

对应城市编号

API 说明
省级 http://cnstatic01.e.vhall.com/static/js/project/questionnaire/provinces.js
城市 http://cnstatic01.e.vhall.com/static/js/project/questionnaire/citys.js

响应事件API

tips: 蓝色标注为最新版本新增相应消息

API 说明
ready SDK准备就绪后触发事件,全局事件
error SDK调用错误事件消息,全局事件
playerReady 播放器准备就绪后触发事件,全局事件
streamOver 直播活动结束,全局事件
publishStart 活动开始推流,全局事件
canPlayLines 获取视频可播放线路,播放器事件
canPlayDefinitions 获取视频可播放清晰度,播放器事件
userOnline 用户上线事件消息
userOffline 用户下线事件消息
chatMsg 收到直播聊天消息事件(当前用户发送消息不会触发该事件)
disadbleChat 直播禁言消息
permitChat 直播恢复禁言消息
forbidChat 直播全员禁言消息,1为全员禁言,0为恢复全员禁言
kickout 直播踢出消息
kickoutrestore 直播恢复踢出消息
vhall_live_history_chat_msg 拉取直播历史消息后触发事件
vhall_record_history_chat_msg 拉取回放历史消息后触发事件
questionSwitch 问答开关消息
sendQuestion 问答消息发送事件
questionMsg 收到问答消息,只包含用户能接收的问答消息
getQuestionList 拉取直播问答消息后触发事件
sendSign 发送签到请求后触发事件
startSign 接收到签到消息后触发事件
vhall_history_notice 拉取历史直播公告消息后触发事件
announcement 收到公告消息时候触发
sendCustomEvent 发送用户自定义广播消息请求后触发
customEvent 接收到用户自定义广播消息后触发事件
UpdateUser 发送更新用户信息请求后触发事件
questionPagerList 接收问卷消息
live_start H5直播开始事件
live_over H5直播结束事件
lotteryStart 开始抽奖消息v2.6.0开始支持
lotteryResultNotice 抽奖结束消息v2.6.0开始支持
questionarie_submit_success 提交问卷答案成功消息v2.6.0开始支持
questionarie_submit_error 提交问卷答案失败消息v2.6.0开始支持
hostNotice 主持人上下线消息v2.6.4开始支持

注意:chatMsg中收到的消息"type":"image"时表示图片类型,其中image_urls:['url','url']图片链接 ,图片链接前缀为https://cnstatic01.e.vhall.com/upload/ 图片支持动态大小缩放,使用方法参考:https://help.aliyun.com/document_detail/44688.html?spm=a2c4g.11186623.6.1238.3bb0c1f60HfRCX

VHALL_SDK客户端错误代码

错误码 说明
10000 消息体格式不对
10001 消息体为空
10002 当前用户被禁言
10003 聊天输入不能超过140个字符
10004 当前已开启全员禁言
10005 当前活动不是直播状态
10006 当前活动未开启问答
10007 当前用户被踢出
20000 接口请求成功
20005 接口请求失败
50400 用户身份认证错误
50401 用户发送消息频次超过限制
50402 活动xxx发送消息频次超过限制
50403 自定义广播消息内容长度超过限制

VHALL_SDK客户端播放器初始化说明

注意:播放器初始化时会提供一套control控制,pc会提供弹幕输入控制,在使用时如需自定义,请自行用样式覆盖 如:

// 控制弹幕输入隐藏
.vhallPlayer-container .vhallPlayer-barrage-box{
   display: none !important;
}

主要代码示例

所有api及event事件的使用样例 SDK准备就绪后触发事件

     /**
     * [ready sdk准备就绪]
     */
    VHALL_SDK.on('ready', function() {
        VHALL_SDK.getUserinfo();
        /**

         * {
         *     avatar:"//cnstatic01.e.vhall.com/static/images/watch/head50.png" //头像
         *     forbidchat:"" //0:未开启全员禁言,1:已开启全员禁言
         *     is_gag:0 //0:未禁言,1:禁言
         *     is_kickout:0 //0:未踢出,1:踢出
         *     role:"user"//用户角色
         *     userid:"用户参会id"
         *     username:"昵称"
         * }
         */
        VHALL_SDK.getRoominfo();
        /**

         *  {
         *     type: 1 // 1:活动直播中,2:预约中,3:活动结束
         *     openQuestion : 1 //1: 开启,0 || '':关闭
         * }
         */
    });

SDK调用错误事件

    /**

     * [error sdk调用错误事件]
     * @param  {[type]} msg [description]
     */
    VHALL_SDK.on('error', function(msg) {
        console.log(msg);
    });`</code>`

播放器就绪后触发事件

    VHALL_SDK.on("playerReady", function(){
     let speedList = VHALL_SDK.player.getSpeedList()
	 console.log('倍速列表:' + speedList)
	 /**
     * 设置倍速
     */
	 VHALL_SDK.player.playSpeed(1.5)
    /**
     * 可播线路消息
     */
    VHALL_SDK.player.on('canPlayLines', function(msg) {
        var _src = '';
        //  i 的值为之后调用方法VHALL_SDK.player.setPlayerLine的传参
        for (var i in msg) {
            _src += `<li>` + i + `</li>`;
        }
   $("#lines").html(_src).find("li").eq(0).addClass('active');
    });
    /**

     * 可播清晰度消息
     */
    VHALL_SDK.player.on('canPlayDefinitions', function(msg) {
        var _src = '';
         //  i 的值为之后调用方法VHALL_SDK.player.setPlayerDefinition的传参
        for (var i in msg) {
            _src += `<li>` + i + `</li>`;
        }
        $("#definitions").html(_src).find("li").eq(0).addClass('active');
    });
});
// 监听主持人上下线消息
VHALL_SDK.on('hostNotice', function (msg) {
  if (msg.type == 'online') {
    console.log('主持人上线');
  } else {
    console.log('主持人下线');
  }
});
VHALL_SDK.queryRoominfo().then(res => {
	console.log('----实时通过接口获取活动信息----');
 	console.log(res)
})

活动开始推流
  VHALL_SDK.on('publishStart', function(msg) {
            alert('活动开始推流');            
        });`</code>`
直播结束
`<code>`
  VHALL_SDK.on('streamOver', function(msg) {
            alert('活动已结束');            
        });`</code>`

用户上线

    /**

     * [userOnline 用户上线]
     * @param  {[type]} msg [description]
     */
    VHALL_SDK.on('userOnline', function(msg) {
        console.log(msg);
    });`</code>`
    
用户下线

    /**

     * [userOffline 用户下线]
     * @param  {[type]} msg [description]
     */
    VHALL_SDK.on('userOffline', function(msg) {
        console.log(msg);
    });`</code>`

收到直播聊天消息

    /**

     * [chatMsg 直播收到聊天消息]
     * @param  {[type]} msg [object]
     */
    VHALL_SDK.on('chatMsg', function(msg) {
        console.log(msg);
    });`</code>`

直播消息发送后触发事件

     * [sendChat 直播消息发送后事件] (H5活动不会调用回调函数)
     */
    VHALL_SDK.on('sendChat, function(msg) {
        console.log(msg);
    });`</code>`

问答消息发送后触发事件

    /**

     * [sendQuestion 直播问答消息发送事件]
     */
    VHALL_SDK.on('sendQuestion, function(msg) {
        console.log(msg);
    });
    
直播禁言消息

    /**

     * [disadbleChat 直播禁言消息]
     * @param  {[type]} [禁言用户id]
     */
    VHALL_SDK.on('disadbleChat', function(userid) {
        console.log(userid);
    });`</code>`
    
直播恢复禁言消息

    /**

     * [forbidchat 直播全员禁言消息]
     * @param  {[type]} status [1:开启,0:关闭]
     */
    VHALL_SDK.on('forbidChat', function(status) {
        console.log(status);
    });

直播踢出消息

    /**

     * [kickout 直播踢出消息]
     * @param  {[type]} userid [被踢出用户id]
     */
    VHALL_SDK.on('kickout', function(userid) {
        console.log(userid);
    });
        
直播恢复踢出消息

    /**

     * [kickoutRestore 直播恢复踢出消息]
     * @param  {[type]} userid [恢复踢出用户id]
     */
    VHALL_SDK.on('kickoutRestore', function(userid) {
        console.log(userid);
    });
       
获取直播历史消息成功回调

    /**

     * [vhall_live_history_chat_msg 获取直播历史消息成功回调]
     * @param  {[arraylist]} msg [数据数组]
     */
    VHALL_SDK.on('vhall_live_history_chat_msg', function(msg) {
        console.log(msg);
    });
    
获取回放历史消息成功回调

    /**

     * [vhall__record_history_chat_msg 获取回放历史消息成功回调]
     * @param  {[arraylist]} msg [数据数组,回放中有curr_page,total,total_page有数据]
     */
    VHALL_SDK.on('vhall_record_history_chat_msg', function(msg) {
        console.log(msg);
    });
    
问答开关消息

    /**

     * [questionSwitch 直播问答开关消息]
     * @param  {[type]} msg [msg.status 1:开启,0:关闭]
     */
    VHALL_SDK.on('questionSwitch', function(msg) {
        console.log(userid);
    });
    
发送问答消息后触发事件
`<code>`
    /**

     * [sendQuestion 直播问答消息发送事件]
     */
    VHALL_SDK.on('sendQuestion, function(msg) {
        console.log(msg);
    });
    
收到问答消息

    /**

     * [question 直播问答消息]
     * @param  {[type]} msg [消息体]
     */
    VHALL_SDK.on('questionMsg', function(msg) {
        console.log(userid);
    });
    
拉取问答消息后触发事件

    /**

     * [getQuestionList 获取直播问答历史消息]
     * @type {[type]}
     */
    VHALL_SDK.getQuestionList();
	
	/**
    * 监听主讲发送的问卷消息
    * @param  {[type]} msg [问卷消息体]
    */
	VHALL_SDK.on('questionPagerList', function (msg) {
	  console.log('-----------收到主讲发送的问卷消息-----------')
	  console.log(msg)
	});
	
	/**
    * 监听抽奖开始消息
    * @param  {[type]} msg [消息体]
    */
	VHALL_SDK.on('lotteryStart', function (msg) {
	   alert('抽奖开始')
	});
	
	/**
    * 监听抽奖结束消息
    * @param  {[type]} msg [消息体]
    */
	VHALL_SDK.on('lotteryResultNotice', function (msg) {
	   // msg: {winners: [中奖用户列表], lottery_id:'抽奖id', won: true| false}
	   // won 当前用户是否中奖
	   window.lotteryData = msg
       var lotteryTip = msg.won ? '恭喜中奖,请填写中奖信息' : '抽奖结束,很遗憾未中奖'
       alert(lotteryTip)
       if(msg.won){
         $('.lottery-box').css('display','block')
       }
	});
	
	/**
    * 监听提交问卷答案成功消息
    * @param  {[type]} msg [消息体]
    */
	VHALL_SDK.on('questionarie_submit_success', function (msg) {
	   alert('问卷提交成功')
	});
	
	/**
    * 监听提交问卷答案失败消息
    * @param  {[type]} msg [消息体]
    */
	VHALL_SDK.on('questionarie_submit_error', function (msg) {
	   alert('问卷提交失败')
	});
	
	/* 发送问卷答案,报文样例 */
	var questionPager = {
		survey_id: "8102",
		data: {
			text: {
			  "7722": "少时诵诗书所"
			},
			radio: {
				"7720": {
				   "13275": "选项1"
				}
			},
			checkbox: {
				"7721": {
					"13277": "选项1",
					"13278": "选项2",
					"13279": "是是是"
				}
			},
			select: {
				"7723": "19,1188"
			}
		}
	};
	VHALL_SDK.sendQuestionPagerAnswer(questionPager)
	监听H5文档和白板的切换事件
	VHALL_SDK.on('panelchange',function(type){
		if(type=='document'){
			//文档区域已切换为文档类型
		}else{
			//文档区域已切换为白板类型
		}
	})
	监听H5文档观众是否可见事件
     VHALL_SDK.on('docvisibility',function(data){
        if(data.status == 'off'){
          // 文档观众不可见
        }else{
           // 文档观众可见
          }
     })