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