Javascript SDK参考 官网开发者
产品介绍
简介
微吼Javascript SDK为WEB端提供了直播和点播功能的集成服务,除支持基础的直播和点播功能外,还融合了如聊天、问答等丰富的互动服务,为用户提供了简单、快速、功能全面、稳定的视频服务。
温馨提示:
1、请不要将单视频嵌入和JSSDK混用,否则并发将被统计为双倍。
2、请不要将JSSDK嵌入到您的小程序中。由于小程序域名审核严格,将会导致JSSDK内部部分请求无通过,无法保证稳定运行。
分类 | 功能 | 描述 |
---|---|---|
聊天 | 观看端聊天 | 支持在直播时聊天和观看回放时聊天 |
问答 | 观看端问答 | 支持观看直播时提问和收取问答 |
视频 | 观看端视频 | 支持移动端和PC端观看直播视频和回放视频 |
文档 | 观看端文档 | 支持移动端和PC端观看文档演示(移动端不支持文档笔触信息) |
点播 | 视频文件上传 | 支持单视频上传、显示文件名称、断点续传功能、上传进度条和百分比、视频不同格式上传和准备、上传中、成功及错误反馈状态 |
签到 | 观看端签到 | 支持用户观看直播时签到的功能 |
公告 | 观看端公告 | 支持观看端显示公告消息以及查看历史公告 |
消息 | 自定义消息类型 | 支持针对不同的消息类型进行了区分设计,观众在提交消息时会带上指定的消息类型,其他观众在接收到消息时会根据消息类型展示不同的效果。 |
问卷 | 观看端问卷 | flash活动问卷需要用户自行处理UI,发送问卷答案,H5活动sdk集成问卷UI。H5和flash同时支持发送问卷消息响应 |
抽奖 | 观看端抽奖 | 支持直播时抽奖消息响应,及发送中间人信息 |
跑马灯 | 观看端播放器跑马灯 | 观看端支持“跑马灯”功能,防录屏。需控制台开启,并设置跑马灯功能 |
水印 | 观看端播放器水印 | 观看端支持“水印”。需控制台开启,并设置水印功能 |
点播上传支持格式
上传格式 | 用途 |
---|---|
rmvb, mp4, avi, wmv, mkv, flv, mp3, wav, mov | 点播 |
播放支持格式
播放格式 | 用途 | PC浏览器 | 移动端浏览器 |
---|---|---|---|
RTMP | 直播 | 支持 | 支持 |
MP4 | 点播/回看 | 支持 | 支持 |
HLS(M3U8) | 点播/回看 | 支持 | 支持 |
浏览器支持
为保证点播SDK能够正常使用请尽量在高版本浏览器下使用本SDK产品(Chrome58及以上版本)
接入流程
接入步骤
1、联系客户经理开通权限[立即沟通权限申请],或400-888-9970电话立即沟通申请
2、获取API/SDK的使用权限信息,得到Acess key点击查看
3、依照文档进行功能接入
Access Key
权限申请通过后,用户可在http://e.vhall.com/home/vhallapi/authlist 页面获取appKey 、secretKey和AppSecretKey。 说明:
appkey: 用于标识客户身份,在网络请求中会以某种形式传输
secretkey: 作为私钥形式存储于客户方本地, 不在网络传递,它的作用是对客户方发起的请求进行数字签名,保证该请求是来自指定客户的请求,并且是合法的有效的。
AppSecretKey:用于SDK,使用方式同secretkey
直播SDK3.0
快速开始
引入微吼直播SAAS jssdk
<script src="//cnstatic01.e.vhall.com/jssdk/dist/3.0.7/VhallSDK.js"></script>
同时支持 http, https 协议
初始化 微吼SDK
var vhallSDK = new VhallSDK({
app_key: '123123asdasdcas34dfsJsadXV', // APP Key
signedat: getQueryString('signedat'), // 用户签名时间
sign: '123123asdasdcas34dfsJsadXV', // 服务器签名
roomid: 房间id, // 直播,回放,点播等房间ID
account: 12312, // 用户参会id
email: getQueryString('email'), // 可选 - 用户邮箱
username: vhall, // 用户昵称
videoContent: '#video', // 播放器dom 节点ID
docContent: '#docWrap', // 文档展示dom 节点id
questionarieContainer: '#questionWrap', // 问卷dom 容器ID
plugins: [ 'chat', 'doc', 'player', 'interactTools'], // SDk 功能列表 ,必须全选
x5_video_fullscreen: true, // 非必填,启用腾讯H5全屏方式 true开启 false关闭 ,默认false
x5_video_type: true // //非必填,启用腾讯H5同层播放器 true开启 false关闭 ,默认false
})
SDK 初始化参数说明
参数 | 类型 | 说明 | 是否必填 | 备注 |
---|---|---|---|---|
app_key | String | 微吼直播开放平台应用key | 是 | 点击获取AppKey |
signedat | String | 微吼直播JSSDK签名时间戳 | 是 | |
sign | String | 微吼直播JSSDK签名时间戳 | 是 | 签名生成算法见下方 |
roomid | Number、String | 微吼直播活动ID | 是 | |
account | Number | 用户ID | 是 | |
String | 用户Email | 否 | ||
username | String | 用户昵称 | 是 | |
videoContent | String | 播放器Dom id | 是 | 例如: #video-content |
docContent | String | 文档区域Dom id | 是 | 例如: #doc-area |
questionarieContainer | String | 问卷容器Dom id | 是 | 如: #question-id |
plugins | Array | 微吼直播功能列表 | 否 | 如: [ 'chat', 'player', 'doc','interactTools'] |
x5_video_fullscreen | Boolean | 启用腾讯H5全屏方式 | 否 | 默认:false。 true开启 ,false关闭 |
x5_video_type | Boolean | 启用腾讯H5同层播放器 | 否 | 默认:false。 true开启 ,false关闭 |
SDK签名(sign)说明
Sign 是微吼直播JSSDK,所有功能必须参数。 作为用户使用微吼直播SDK的唯一合法凭证。 签名有效期为有一个小时。
参与签名参数
字段名称 | 字段说明 | 备注 |
---|---|---|
roomid | 微吼直播 活动ID | |
account | 用户账号 | |
username | 用户昵称 | |
app_key | 微吼直播 开放平台用户应用Key | 点击获取AppKey |
secret_key | 微吼直播 开放平台用户应用secret_key | 点击获取AppKey |
signedat | 签名调用时的当前时间戳(精确到秒) | 示例代码: |
签名算法规则
规则序号 | 规则 | 备注 |
---|---|---|
1 | 按参数名升序排列 | |
2 | 将参与签名的参数 以 Key + Value 形式顺序拼接 | |
3 | 在参数拼接完成后的字符串首尾各加上secret_key | |
4 | 将第三步的得到的字符串进行 md5 加密得到Sign |
签名生成示例代码 PHP
<?php
$secret_key = "f145b675f441cc00dd3e55746a0f4780";
$params = [
"roomid"=> "123456789",
"account"=> "12345",
"username"=> "zhangsan",
"app_key"=> "3eb72619af748d73f7fda1e6b0c692a9",
"signedat"=> "1484620708"
];
// 按参数名升序排列
ksort($params);
// 将键值组合
array_walk($params,function(&$value,$key){
$value = $key . $value;
});
// 拼接,在首尾各加上$secret_key,计算MD5值
$sign = md5($secret_key . implode('',$params) . $secret_key);
// 结果形如
$sign=md5("f145b675f441cc00dd3e55746a0f4780account12345app_key3eb72619af748d73f7fda1e6b0c692a9emailzhangsan@vhall.comroomid123456789signedat1484620708usernamezhangsanf145b675f441cc00dd3e55746a0f4780");
// 计算结果
// $sign = '92eec52c58b9bddc0ba663c75a3c1f7f';
签名生成示例代码 Java
String secret_key = "f145b675f441cc00dd3e55746a0f4780";
String roomid = "123456789";
String account = "12345";
String username = "zhangsan";
String app_key = "3eb72619af748d73f7fda1e6b0c692a9";
String signedat = "1484620708";
String email = "zhangsan@vhall.com";
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("roomid",roomid);
paramMap.put("account",account);
paramMap.put("username",username);
paramMap.put("app_key",app_key);
paramMap.put("signedat",signedat);
paramMap.put("email",email);
String[] keyArray = paramMap.keySet().toArray(new String[0]);
Arrays.sort(keyArray);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(secret_key);
for (String key : keyArray) {
stringBuilder.append(key).append(paramMap.get(key));
}
stringBuilder.append(secret_key);
String signSource = stringBuilder.toString();
MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例
md.update(signSource.getBytes());//此处传入要加密的byte类型值
byte[] result = md.digest();//此处得到的是md5加密后的byte类型值
StringBuilder sb = new StringBuilder(32);
int i;
for (int offset = 0; offset < result.length; offset++) {//做相应的转化(十六进制)
i = result[offset];
if (i < 0) i += 256;
if (i < 16) sb.append("0");
sb.append(Integer.toHexString(i));
}
String str_md5 = sb.toString();
System.out.println(str_md5);
安全说明
MD5(Message Digest Algorithm )为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。该算法为单向不可逆算法。
为增加签名安全系数, 微吼直播参与签名字符串长度为130+,并为sign 设置了1小时时间时效,靠碰撞检测得出相同sign 的难度为130+的阶乘(极其耗费算力)。请各位开放平台用户放心使用。
浏览器兼容性
浏览器 | 版本 | 备注 | |
---|---|---|---|
Chrome | 74版本及以上 | ||
safari | 12版本及以上 | ||
FireFox | 79版本及以上 | ||
edge | 84 版本及以上 | ||
IE | 10 版本及以上 | 需在项目中首先引入//cnstatic01.e.vhall.com/vhall-new-saas/static/polyfill.js?v=20201111 兼容IE10及以上版本 |
|
360 急速浏览器 | 全版本 | ||
手Q 内部浏览器 | 全版本 | ||
微信内置浏览器 | 全版本 | ||
其他手机浏览器 | 绝大部分支持 | 如遇问题请联系商务或邮件我们 |
其他未涉及浏览器可能出现兼容性问题。 问题反馈联系客服
功能模块API
视频模块
视频观看模块 功能API 说明
###调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 player 模块进行调用访问。
API 列表
API 名称 | 功能描述 | 参数 | 返回值 | 备注 | |
---|---|---|---|---|---|
play | 自助操作 播放 | null | null | ||
pause | 自助操作 暂停 | null | null | ||
getSpeedList | 自助操作 获取当前可支持倍速列表 | callBack, 类型: Function | null | ||
setSpeed | 自助操作 设置播放器倍速 | speed, 类型: String | null | 参数为 getSpeedList 方法中返回数组的倍速值。 | |
canPlayDefinitions | 自助操作 获取清晰度列表 | callback, 类型:Function | data, 类型:Array | 回调返回当前活动可支持清晰度列表。 备注: (a:音频,same:原画) | |
setPlayerDefinition | 自助操作 设置清晰度 | definition, 类型: String | null | 参数为 canPlayDefinitions 方法中返回数组中的清晰度, same:代表原画, a: 代表音频 | |
setCurrentTime | 自助操作 设置回放视频时间 | s, 类型:Number | null | 参数为设置的秒数,仅可用于回放。 | |
setPlayerLine | 设置播放线路 | 2.5.0 之前的API 已废止 | |||
openBarrage | 自助操作 打开弹幕功能 | null | null | 不支持Flash类型活动 | |
sendBarrage | 自助操作 发送播放器弹幕 | text, 类型:String | null | 不支持Flash类型活动 | |
closeBarrage | 自助操作 关闭弹幕功能 | null | null | 不支持Flash类型活动 | |
setBarrageInfo | 自助操作 设置弹幕相关信息 | opt, 类型: Object | null | opt 示例: opt={ position: 0, alpha: 0.1, fontsize: 15 , color: ‘#ffffff’} position:位置 0上, 1中, 2下, 3全屏 ,alpha:透明度 0-1,fontsize: 字体大小 (number) ,color: 字体颜色 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 播放
vhallSDKInstance.player.play()
// 自助操作 暂停
vhallSDKInstance.player.pause()
// 自助操作 获取当前可支持倍速列表
vhallSDKInstance.player.getSpeedList((data) => {
// data = [0.5, 1, 2]
})
// 自助操作 设置倍速
vhallSDKInstance.player.setSpeed(speed)
// 自助操作 获取清晰度列表
vhallSDKInstance.player.canPlayDefinitions(callback)
// 自助操作 设置清晰度
vhallSDKInstance.player.setPlayerDefinition(definition)
// 自助操作 设置回放视频时间
vhallSDKInstance.player.setCurrentTime(s)
// 自助操作 打开弹幕
vhallSDKInstance.player.openBarrage()
// 自助操作 关闭弹幕
vhallSDKInstance.player.closeBarrage()
// 自助操作 发送弹幕
vhallSDKInstance.player.sendBarrage(text)
// 自助操作 设置弹幕样式
vhallSDKInstance.player.setBarrageInfo(opt)
文档模块
文档模块 功能API 说明
###调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 doc 模块进行调用访问。
API 名称 | 功能示意 | 参数 | 返回值 | 备注 | |
---|---|---|---|---|---|
zoomIn | 自助操作 文档放大 | null | null | 不支持Flash 活动 | |
zoomOut | 自助操作 文档缩小 | null | null | 不支持Flash 活动 | |
docReset | 恢复文档原始大小和位置 | null | null | 不支持Flash 活动 | |
nextPage | 翻页 下一页 | null | null | 不支持Flash 活动 | |
prevPage | 自助翻页 上一页 | null | null | 不支持Flash 活动 | |
docMove | 自助操作 文档移动 | null | null | 不支持Flash 活动 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// H5文档缩小
vhallSDKInstance.doc.zoomIn()
// 文档缩小
vhallSDKInstance.doc.zoomOut()
// 文档重置大小
vhallSDKInstance.doc.docReset()
// 文档下一页
vhallSDKInstance.doc.nextPage()
// 文档上一页
vhallSDKInstance.doc.prevPage()
// 文档移动
vhallSDKInstance.doc.docMove()
聊天模块
聊天模块 功能API 说明
调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 chat 模块进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
sendChat | 自助操作 发送聊天消息 | msg, 类型:String | null | 聊天内容, 最多140字符 |
sendCustomEvent | 自助操作 发送自定义聊天消息 | msg, 类型:Object | null | 自定义消息对象, {type: '自定义消息类型', data:{ name: '自定义消息数据'}} |
vhall_get_live_history_chat_msg | 自助操作 获取直播聊天历史记录 | opt, 类型:Object | null | 参数为查询参数, {currPage:1, pageSize:50, startTime: '2020/07/13', endTime: '2020/07/15'} 返回primise。出于性能考虑,目前只支持返回最新50条聊天消息内容。 注意:3.0.0至3.0.4版本采用当前对象传参 |
vhall_get_live_history_chat_msg | 自助操作 获取直播聊天历史记录 | opt, 类型:Number | null | 参数为查询页码,且每分页固定返回50条数据。 注意:从3.0.5版本起仅支持通过页码,查询分页数据 |
vhall_get_record_history_chat_msg | 自助操作 获取直播聊天历史记录 | page, 类型:Number | null | 参数为查询页码。 注意:从3.0.5版本起不在支持此方法,统一使用vhall_get_live_history_chat_msg方法获取历史聊天数据 |
destroy | 自助操作 销毁聊天SDK、播放器SDk |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 发送聊天消息
vhallSDKInstance.chat.sendChat(msg)
// 自助操作 发送自定义聊天消息
vhallSDKInstance.chat.sendCustomEvent(msg)
// 自助操作 获取直播聊天历史记录
vhallSDKInstance.vhall_get_live_history_chat_msg(opt)
// 自助操作 回放拉取历史聊天记录
vhallSDKInstance.chat.vhall_get_record_history_chat_msg(page)
// 自助操作 销毁播放器和文档SDK
vhallSDKInstance.chat.destroy()
互动工具模块
互动工具模块 功能API 说明
调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,模块进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
sendQuestion | 自助操作 发送问答提问内容 | text, 类型:String | null | 提问内容 |
sendSign | 自助操作 签到 | sign_id, 类型:String | null | 在参与签到消息监听事件'startSign'中获取sign_id |
sendQuestionPagerAnswer | 自助操作 发送问卷数据 | opt, 类型:Object | null | 参数为问卷内容.例如:{"survey_id": "8102","data": {"text": {"7722": "少时诵诗书所"},"c": {"7720": {"13275": "选项1"}},"checkbox": {"7721": {"13277": "选项1","13278": "选2"}},"select": {"7723": "19,1188"}}} survey_id问卷id。仅flash类型活动使用 |
sendLotteryInfo | 自助操作 发送中奖信息 | opt, 类型:Object | null | 提交中奖人信息,业务层做校验。例如:{ lottery_id:'抽奖id', name:'中奖人姓名',phone:'手机号', remarks:’备注’ } |
vhall_get_live_history_question_msg | 自助操作 获取直播问答记录 | null | promise | |
vhall_get_history_question_msg | 自助操作 获取回放问答记录 | null | promise | |
vhall_get_history_notice | 自助操作 获取历史公告记录 | page, 类型:Number | promise | |
queryQuestionList | 自助操作 获取问卷数据 | id, 类型:String | promise | 问卷id,** 仅Flash类型活动可用**。通过消息监听事件'questionnaire_push'获取问卷id |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 问答问题发送
vhallSDKInstance.sendQuestion(text)
// 自助操作 签到
vhallSDKInstance.sendSign(sign_id)
// 自助操作 发送问卷数据
vhallSDKInstance.sendQuestionPagerAnswer(opt)
// 自助操作 发送中奖信息
vhallSDKInstance.sendLotteryInfo(opt)
// 自助操作 获取直播问答记录
vhallSDKInstance.vhall_get_live_history_question_msg().then(res => {}).catch(e => {})
// 自助操作 获取回放问答记录
vhallSDKInstance.vhall_get_history_question_msg().then(res => {}).catch(e => {})
// 自助操作 获取历史公告记录
vhallSDKInstance.vhall_get_history_notice(page).then(res => {}).catch(e => {})
// 自助操作 获取问卷数据
vhallSDKInstance.queryQuestionList(id).then(res => {}).catch(e => {})
房间信息服务模块
房间信息 功能API 说明
调用方式:
在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
getRoominfo | 自助操作 获取当前活动状态 | null | promise | |
getUserinfo | 自助操作 获取当前用户参会信息 | null | promise | {avatar: '',dataToken: '',forbidchat: 1, is_gag : 1, is_kickout : 1, nick_name : '', role: 'user', userId : '', vss : Object} 备注:forbidchat:全体禁言(仅flash可用),1:开启,0:关闭。 is_gag:是否被禁言,1:禁言,0:未禁言。is_kickout: 是否被踢出,1:踢出,0:未踢出。role: 角色,user:观众,host:主持,guest:嘉宾,assistant:助理 |
updateUserInfo | 自助操作 更新用户昵称 | name, 类型:String | promise | 参数长度小于30 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 获取当前活动状态
vhallSDKInstance.getRoominfo().then(res => {}).catch(e => {})
// 自助操作 获取当前用户参会信息
vhallSDKInstance.getUserinfo().then(res => {}).catch(e => {})
// 自助操作 更新用户昵称
vhallSDKInstance.updateUserInfo(name)
全局事件消息列表
全局事件说明
调用方式:
在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,用$on方法进行使用。
事件 名称 | 功能描述 | 参数 | 返回值 | 备注 | ||||
---|---|---|---|---|---|---|---|---|
ready | 初始化完成 | null | null | |||||
playerReady | 播放器初始化成功 | null | null | |||||
streamOver | Flash 类型活动,直播结束 | null | null | 仅Flash 类型活动会派发此事件 | ||||
publishStart | Flash 类型活动,直播开始事件 | null | null | 仅Flash 类型活动会派发此事件 | ||||
live_start | H5类型活动 ,直播开始事件 | null | null | 仅H5 类型活动会派发此事件 | ||||
live_over | H5类型活动 ,直播结束事件 | null | null | 仅H5 类型活动会派发此事件 | ||||
userOnline | 用户上线通知 | callback(datat), 类型:Function | data,类型:Object | data.data = {hide: false,socket_id: "1TBpcjxU2mf2ye6vDy-r",type: "Join"} | ||||
userOffline | 用户离线通知 | callback(data), 类型:Function | data,类型:Object | data.data = {hide: false,socket_id: "94TPRGTW4LFT2KstDy-V",type: "Leave"} | ||||
chatMsg | 聊天消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
sendCustomEvent | 发送自定义消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
customEvent | 自定义广播消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
question_answer_open | 开启问答 | callback(data), 类型:Function | data,类型:Object | data.data = {nick_name: '主持人',type: 'question_answer_open' } | ||||
question_answer_close | 关闭问答 | callback(data) , 类型:Function | data,类型:Object | data.data = {nick_name: '主持人',type: 'question_answer_close' } | ||||
question_answer_commit | 主讲人回复问答消息 | callback(data) , 类型:Function | data,类型:Object | 主讲人回复消息 | ||||
question_answer_backout | 主讲人撤回问答回复 | callback(data) , 类型:Function | data,类型:Object | data.data = {question_answer_id: "4137",type: "question_answer_backout"} | ||||
startSign | 开始签到环节 | callback(data) , 类型:Function | data,类型:Object | data.data = {room_id:"lss_32f5a298",sign_creator_avatar: "//a.com/15.jpeg",sign_creator_id:"16420899",sign_creator_nickname: "Batur",sign_id: "19061",sign_show_time: "30",type: "sign_in_push"} | ||||
sendSign | 签到 | callback(data), 类型:Function | data,类型:Object | data = {code:200} | ||||
questionnaire_push | 打开问卷消息 | callback(data), 类型:Function | data,类型:Object | data.data = {nick_name: "Batur",questionnaire_id: "271631",room_join_id: "16420899",room_role: "1",type: "questionnaire_push"} questionnaire_id:问卷id room_role:房间角色 1主持人 2观众 3嘉宾 4助理 | ||||
questionarie_submit_success | 问卷提交成功 | callback(data), 类型:Function | data,类型:Object | data.data = {naire_id: 问卷id} | ||||
questionarie_submit_error | 问卷服务提交失败 | callback(data), 类型:Function | data,类型:Object | 返回错误信息error | ||||
questionPagerList | 获取问卷列表 | null | null | 返回问卷数据data | ||||
lotteryStart | 开始抽奖 | callback(data), 类型:Function | data,类型:Object | data.data = {lottery_creator_avatar: "//ll.com/upload/15.jpeg",lottery_creator_id: "16420899",lottery_creator_nickname: "Batur",lottery_id: "6904",lottery_number: "1",lottery_status: 0,lottery_type: "1",room_id: "lss_32f5a298",type: "lottery_push"}lottery_id:奖品id,lottery_number:中奖人数lotteryResultNotice | 结束抽奖 | null | callback(datat), 类型:Function | data.data = ["lottery_winners" : []] 返回中间人数组 |
disadbleChat | 禁言 | callback(datat), 类型:Function | data,类型:Object | data.data = {nick_name: "dazhen" ,role_name: "2" ,room_join_id: "16420899" ,target_id: "16422570" ,type: "disable"} target_id:被禁言成员id | ||||
permitChat | 恢复禁言 | callback(data), 类型:Function | data,类型:Object | 消息体说明:{data: {target_id: "16422570", type: "permit"} }target_id: 取消禁言成员id | ||||
forbidChat | 全体禁言 | callback(data), 类型:Function | data,类型:Object | data.data = {allStatus: 1} allStatus:1为全员禁言,0为恢复全员禁言 | ||||
kickoutrestore | 恢复踢出 | null | null | |||||
kickout | 踢出 | callback(data), 类型:Function | data,类型:Object | data.data = {role_name: "2", room_join_id: "16420899", target_id: "16422570", type: "room_kickout"} target_id: 踢出id | ||||
room_announcement | 收到公告消息 | callback(data), 类型:Function | data,类型:Object | 返回数据 | ||||
UpdateUser | 更新用户信息 | null | null | |||||
hostNotice | 主持人下线消息 | null | null | |||||
error | 错误日志 | null | callback(data),类型:Object | 返回 {msg, data} msg是错误提示信息, data是错误消息体包含code,msg,data信息 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 播放器初始化成功
vhallSDKInstance.$on('ready', () => {
})
// 播放器初始化成功
vhallSDKInstance.$on('playerReady', () => {
})
// 直播停止推流
vhallSDKInstance.$on('streamOver', () => {
})
// 直播开始推流
vhallSDKInstance.$on('publishStart', () => {
})
// H5直播开始事件
vhallSDKInstance.$on('live_start', () => {
})
// H5直播结束事件
vhallSDKInstance.$on('live_over', () => {
})
// 用户上线通知
vhallSDKInstance.$on('userOnline', (data) => {
})
// 用户离线通知
vhallSDKInstance.$on('userOffline', (data) => {
})
// 聊天消息监听
vhallSDKInstance.$on('chatMsg', (data) => {
})
// 发送自定义消息监听
vhallSDKInstance.$on('sendCustomEvent', (data) => {
})
// 自定义广播消息监听
vhallSDKInstance.$on('customEvent', (data) => {
})
// 开启问答
vhallSDKInstance.$on('question_answer_open', (data) => {
})
// 关闭问答
vhallSDKInstance.$on('question_answer_close', (data) => {
})
// 主讲人回复问答消息
vhallSDKInstance.$on('question_answer_commit', (data) => {
})
// 主讲人撤回问答回复
vhallSDKInstance.$on('question_answer_backout', (data) => {
})
// 开始签到环节
vhallSDKInstance.$on('startSign', (data) => {
})
// 签到
vhallSDKInstance.$on('sendSign', (data) => {
})
// 打开问卷消息
vhallSDKInstance.$on('questionnaire_push', (data) => {
})
// 问卷提交成功
vhallSDKInstance.$on('questionarie_submit_success', (data) => {
})
// 问卷服务提交失败
vhallSDKInstance.$on('questionarie_submit_error', (error) => {
})
// 获取问卷列表
vhallSDKInstance.$on('questionPagerList', (data) => {
})
// 开始抽奖
vhallSDKInstance.$on('lotteryStart', (data) => {
})
// 结束抽奖
vhallSDKInstance.$on('lotteryResultNotice', (data) => {
})
// 禁言
vhallSDKInstance.$on('disableChat', (data) => {
})
// 恢复禁言
vhallSDKInstance.$on('permitChat', (data) => {
})
// 全体禁言1为全员禁言,0为恢复全员禁言
vhallSDKInstance.$on('forbidChat', (data) => {
})
// 恢复踢出
vhallSDKInstance.$on('kickoutrestore', () => {
})
// 踢出
vhallSDKInstance.$on('kickout', (data) => {
})
// 收到公告消息
vhallSDKInstance.$on('room_announcement', (data) => {
})
// 更新用户信息
vhallSDKInstance.$on('UpdateUser', () => {
})
// 错误日志统一对外消息
vhallSDKInstance.$on('error', ({msg, data}) => {
})
// 主持人下线消息
vhallSDKInstance.$on('hostNotice', () => {
})
全局错误code 列表
VHALL_SDK客户端错误代码
使用方式
通过 VhallSDK 初始化后的,实例句柄。 增加 error 事件监听即可。
错误码 | 说明 |
---|---|
10000 | 消息体格式不对 |
10001 | 消息体为空 |
10002 | 当前用户被禁言 |
10003 | 聊天输入不能超过140个字符 |
10004 | 当前已开启全员禁言 |
10005 | 当前活动不是直播状态 |
10006 | 当前活动未开启问答 |
10007 | 当前用户被踢出 |
20000 | 接口请求成功 |
20005 | 接口请求失败 |
50400 | 用户身份认证错误 |
50401 | 用户发送消息频次超过限制 |
50402 | 活动xxx发送消息频次超过限制 |
50403 | 自定义广播消息内容长度超过限制 |
示例代码
var vhallInstance = new VhasllSDK ({
xxx
})
// 监听全局错误事件
vhallInstance.$on('error', (data) => {
console.log(data)
})
直播SDKDemo
直播SDK3.0兼容旧版本升级方案
SDK DEMO地址
访问地址: http://cnstatic01.e.vhall.com/jssdk/dist/3.0.7/login.html
访问地址登录成功后,观看地址(请注意:变更为old.html)
http://cnstatic01.e.vhall.com/jssdk/dist/3.0.7/old.html?app_key=app_key&signedat=signedat&sign=sign&id=roomid&account=account&username=username
升级方案使用限制
旧版本升级方案从SDK3.0.1起开始支持,以下SDK使用方式仅适用于兼容方案中的old.html页面,用来兼容SDK3.0前版本
依赖库
本SDK依赖于JQuery库,请在需要引入JQuery的页面按以下代码示例进行引入,对JQuery版本没有要求
引入JS文件
在需要调用SDK的页面插入以下代码以引入JS文件:
SDK初始化
使用以下的方法和参数进行SDK的初始化以及权限的验证
注1: 签名生成规则同SDK3.0
注2: 兼容方案中SDK初始化传参取消wrapper参数,H5和Flash活动文档容器统一使用docContent字段,并使用id值为参数。
注3: 兼容方案中SDK初始化传参取消protocol参数,SDK3.0.1起根据http泛协议,可以根据地址中http/https自动切换,不再需要用户通过传参切换协议。
注4: 兼容方案中SDK初始化传参取消facedom和textdom参数,facedom是聊天输入区域中自定义表情面板容器,从SDK3.0起由用户在业务层维护,SDK不再提供支持。textdom为聊天等输入内容,从SDK3.0起聊天等输入内容由用户通过调用SDK方法时,作为参数传递给SDK。
SDK API
兼容方案中,对于SDK API的调用以及传参方式沿用SDK3.0之前版本使用方式
SDK 事件监听
兼容方案中,对于SDK 事件监听的调用方式沿用SDK3.0之前版本使用方式
直播SDK3.1
开始
引入微吼直播SAAS jssdk
<script src="//cnstatic01.e.vhall.com/jssdk/dist/3.1.3/VhallSDK.js"></script>
仅支持https 协议
初始化 微吼SDK
var vhallSDK = new VhallSDK({
app_key: '123123asdasdcas34dfsJsadXV', // APP Key
signedat: getQueryString('signedat'), // 用户签名时间
sign: '123123asdasdcas34dfsJsadXV', // 服务器签名
roomid: 房间id, // 直播,回放,点播等房间ID
account: 12312, // 用户参会id
email: getQueryString('email'), // 可选 - 用户邮箱
username: vhall, // 用户昵称
videoContent: '#video', // 播放器dom 节点ID
docContent: '#docWrap', // 文档展示dom 节点id
questionarieContainer: '#questionWrap', // 问卷dom 容器ID
plugins: [ 'chat', 'doc', 'player', 'interactTools'], // SDk 功能列表 ,必须全选
x5_video_fullscreen: true, // 非必填,启用腾讯H5全屏方式 true开启 false关闭 ,默认false
x5_video_type: true // //非必填,启用腾讯H5同层播放器 true开启 false关闭 ,默认false
password: '', // 第三方k值或观看限制密码
record_id: '12345678', // 设置回放id
sign_type: 0 // 验签规则 必填
})
SDK 初始化参数说明
参数 | 类型 | 说明 | 是否必填 | 备注 |
---|---|---|---|---|
app_key | String | 微吼直播开放平台应用key | 是 | 点击获取AppKey |
signedat | String | 微吼直播JSSDK签名时间戳 | 是 | |
sign | String | 微吼直播JSSDK签名时间戳 | 是 | 签名生成算法见下方 |
roomid | Number、String | 微吼直播活动ID | 是 | |
account | Number | 用户ID | 是 | |
String | 用户Email | 否 | ||
username | String | 用户昵称 | 是 | |
videoContent | String | 播放器Dom id | 是 | 例如: #video-content |
docContent | String | 文档区域Dom id | 是 | 例如: #doc-area |
questionarieContainer | String | 问卷容器Dom id | 是 | 如: #question-id |
plugins | Array | 微吼直播功能列表 | 否 | 如: [ 'chat', 'player', 'doc','interactTools'] |
x5_video_fullscreen | Boolean | 启用腾讯H5全屏方式 | 否 | 默认:false。 true开启 ,false关闭 |
x5_video_type | Boolean | 启用腾讯H5同层播放器 | 否 | 默认:false。 true开启 ,false关闭 |
password | String | 第三方k值或观看限制密码(新增) | 否 | |
record_id | String | 设置回放id(新增) | 否 | 优先级最高,设置record_id后即使房间在直播状态,也会优先播放record_id对应的回放 |
sign_type | Number | 验签规则切换(新增) | 是 | 默认:0。 0: MD5 1:RSA |
SDK签名(sign)说明
Sign 是微吼直播JSSDK,所有功能必须参数。 作为用户使用微吼直播SDK的唯一合法凭证。3.1版本开始支持两种验签规则分别为MD5和RSA两种方式。对应初始化JSSDK时,需要根据不同规则赋值sign_type 来驱动JSSDK使用
签名方式一 (MD5签名方式)
参与签名参数
字段名称 | 字段说明 | 备注 |
---|---|---|
roomid | 微吼直播 活动ID | |
account | 用户账号 | |
username | 用户昵称 | |
app_key | 微吼直播 开放平台用户应用Key | 点击获取AppKey |
secret_key | 微吼直播 开放平台用户应用secret_key | 点击获取AppKey |
signedat | 签名调用时的当前时间戳(精确到秒) | 示例代码: |
签名算法规则
规则序号 | 规则 | 备注 |
---|---|---|
1 | 按参数名升序排列 | |
2 | 将参与签名的参数 以 Key + Value 形式顺序拼接 | |
3 | 在参数拼接完成后的字符串首尾各加上secret_key | |
4 | 将第三步的得到的字符串进行 md5 加密得到Sign |
签名生成示例代码 PHP
<?php
$secret_key = "f145b675f441cc00dd3e55746a0f4780";
$params = [
"roomid"=> "123456789",
"account"=> "12345",
"username"=> "zhangsan",
"app_key"=> "3eb72619af748d73f7fda1e6b0c692a9",
"signedat"=> "1484620708"
];
// 按参数名升序排列
ksort($params);
// 将键值组合
array_walk($params,function(&$value,$key){
$value = $key . $value;
});
// 拼接,在首尾各加上$secret_key,计算MD5值
$sign = md5($secret_key . implode('',$params) . $secret_key);
// 结果形如
$sign=md5("f145b675f441cc00dd3e55746a0f4780account12345app_key3eb72619af748d73f7fda1e6b0c692a9emailzhangsan@vhall.comroomid123456789signedat1484620708usernamezhangsanf145b675f441cc00dd3e55746a0f4780");
// 计算结果
// $sign = '92eec52c58b9bddc0ba663c75a3c1f7f';
签名生成示例代码 Java
String secret_key = "f145b675f441cc00dd3e55746a0f4780";
String roomid = "123456789";
String account = "12345";
String username = "zhangsan";
String app_key = "3eb72619af748d73f7fda1e6b0c692a9";
String signedat = "1484620708";
String email = "zhangsan@vhall.com";
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("roomid",roomid);
paramMap.put("account",account);
paramMap.put("username",username);
paramMap.put("app_key",app_key);
paramMap.put("signedat",signedat);
paramMap.put("email",email);
String[] keyArray = paramMap.keySet().toArray(new String[0]);
Arrays.sort(keyArray);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(secret_key);
for (String key : keyArray) {
stringBuilder.append(key).append(paramMap.get(key));
}
stringBuilder.append(secret_key);
String signSource = stringBuilder.toString();
MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例
md.update(signSource.getBytes());//此处传入要加密的byte类型值
byte[] result = md.digest();//此处得到的是md5加密后的byte类型值
StringBuilder sb = new StringBuilder(32);
int i;
for (int offset = 0; offset < result.length; offset++) {//做相应的转化(十六进制)
i = result[offset];
if (i < 0) i += 256;
if (i < 16) sb.append("0");
sb.append(Integer.toHexString(i));
}
String str_md5 = sb.toString();
System.out.println(str_md5);
安全说明
MD5(Message Digest Algorithm )为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。该算法为单向不可逆算法。
为增加签名安全系数, 微吼直播参与签名字符串长度为130+,并为sign 设置了1小时时间时效,靠碰撞检测得出相同sign 的难度为130+的阶乘(极其耗费算力)。请各位开放平台用户放心使用。
签名方式二 (RSA签名方式)
参与签名参数
字段名称 | 字段说明 | 备注 |
---|---|---|
roomid | 微吼直播 活动ID | |
account | 用户账号 | |
username | 用户昵称 | |
app_key | 微吼直播 开放平台用户应用Key | 点击获取AppKey |
secret_key | 微吼直播 开放平台用户应用secret_key | 点击获取AppKey |
signedat | 签名调用时的当前时间戳(精确到秒) | 示例代码: |
签名算法规则
规则序号 | 规则 | 备注 |
---|---|---|
1 | 按参数名升序排列 | |
2 | 将参与签名的参数 以 Key + Value 形式顺序拼接 | |
3 | 将第二步的得到的字符串进行 md5 加密计算 | |
4 | 用私钥将第三步的md5结果,进行RSA签名计算 | |
5 | 将第四步中的结果,进行base64url_encode编码,结果作为sign值 |
签名生成示例代码 PHP
依赖php的comoser扩展("phpseclib/phpseclib": "2.0")
浏览器兼容性
浏览器 | 版本 | 备注 | |
---|---|---|---|
Chrome | 74版本及以上 | ||
safari | 12版本及以上 | ||
FireFox | 79版本及以上 | ||
edge | 84 版本及以上 | ||
IE | 10 版本及以上 | 需在项目中首先引入//cnstatic01.e.vhall.com/vhall-new-saas/static/polyfill.js?v=20201111 兼容IE10及以上版本 |
|
360 急速浏览器 | 全版本 | ||
手Q 内部浏览器 | 全版本 | ||
微信内置浏览器 | 全版本 | ||
微信小程序 | 不支持 | 微信小程序由于域名校验严格,推荐使用标品H5页面嵌入开发 | |
其他手机浏览器 | 绝大部分支持 | 如遇问题请联系商务或邮件我们 |
其他未涉及浏览器可能出现兼容性问题。 问题反馈联系客服
功能API
视频功能模块
视频观看模块 功能API 说明
###调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 player 模块进行调用访问。
API 列表
API 名称 | 功能描述 | 参数 | 返回值 | 备注 | |
---|---|---|---|---|---|
play | 自助操作 播放 | null | null | ||
pause | 自助操作 暂停 | null | null | ||
getSpeedList | 自助操作 获取当前可支持倍速列表 | callBack, 类型: Function | null | ||
setSpeed | 自助操作 设置播放器倍速 | speed, 类型: String | null | 参数为 getSpeedList 方法中返回数组的倍速值。 | |
canPlayDefinitions | 自助操作 获取清晰度列表 | callback, 类型:Function | data, 类型:Array | 回调返回当前活动可支持清晰度列表。 备注: (a:音频,same:原画) | |
setPlayerDefinition | 自助操作 设置清晰度 | definition, 类型: String | null | 参数为 canPlayDefinitions 方法中返回数组中的清晰度, same:代表原画, a: 代表音频 | |
setCurrentTime | 自助操作 设置回放视频时间 | s, 类型:Number | null | 参数为设置的秒数,仅可用于回放。 | |
setPlayerLine | 设置播放线路 | 2.5.0 之前的API 已废止 | |||
openBarrage | 自助操作 打开弹幕功能 | null | null | 不支持Flash类型活动 | |
sendBarrage | 自助操作 发送播放器弹幕 | text, 类型:String | null | 不支持Flash类型活动 | |
closeBarrage | 自助操作 关闭弹幕功能 | null | null | 不支持Flash类型活动 | |
setBarrageInfo | 自助操作 设置弹幕相关信息 | opt, 类型: Object | null | opt 示例: opt={ position: 0, alpha: 0.1, fontsize: 15 , color: ‘#ffffff’} position:位置 0上, 1中, 2下, 3全屏 ,alpha:透明度 0-1,fontsize: 字体大小 (number) ,color: 字体颜色 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 播放
vhallSDKInstance.player.play()
// 自助操作 暂停
vhallSDKInstance.player.pause()
// 自助操作 获取当前可支持倍速列表
vhallSDKInstance.player.getSpeedList((data) => {
// data = [0.5, 1, 2]
})
// 自助操作 设置倍速
vhallSDKInstance.player.setSpeed(speed)
// 自助操作 获取清晰度列表
vhallSDKInstance.player.canPlayDefinitions(callback)
// 自助操作 设置清晰度
vhallSDKInstance.player.setPlayerDefinition(definition)
// 自助操作 设置回放视频时间
vhallSDKInstance.player.setCurrentTime(s)
// 自助操作 打开弹幕
vhallSDKInstance.player.openBarrage()
// 自助操作 关闭弹幕
vhallSDKInstance.player.closeBarrage()
// 自助操作 发送弹幕
vhallSDKInstance.player.sendBarrage(text)
// 自助操作 设置弹幕样式
vhallSDKInstance.player.setBarrageInfo(opt)
文档功能模块
文档模块 功能API 说明
###调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 doc 模块进行调用访问。
API 名称 | 功能示意 | 参数 | 返回值 | 备注 | |
---|---|---|---|---|---|
zoomIn | 自助操作 文档放大 | null | null | 不支持Flash 活动 | |
zoomOut | 自助操作 文档缩小 | null | null | 不支持Flash 活动 | |
docReset | 恢复文档原始大小和位置 | null | null | 不支持Flash 活动 | |
nextPage | 翻页 下一页 | null | null | 不支持Flash 活动 | |
prevPage | 自助翻页 上一页 | null | null | 不支持Flash 活动 | |
docMove | 自助操作 文档移动 | null | null | 不支持Flash 活动 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// H5文档缩小
vhallSDKInstance.doc.zoomIn()
// 文档缩小
vhallSDKInstance.doc.zoomOut()
// 文档重置大小
vhallSDKInstance.doc.docReset()
// 文档下一页
vhallSDKInstance.doc.nextPage()
// 文档上一页
vhallSDKInstance.doc.prevPage()
// 文档移动
vhallSDKInstance.doc.docMove()
聊天功能模块
聊天模块 功能API 说明
调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,下 chat 模块进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
sendChat | 自助操作 发送聊天消息 | msg, 类型:String | null | 聊天内容, 最多140字符 |
sendCustomEvent | 自助操作 发送自定义聊天消息 | msg, 类型:Object | null | 自定义消息对象, {type: '自定义消息类型', data:{ name: '自定义消息数据'}} |
vhall_get_live_history_chat_msg | 自助操作 获取直播聊天历史记录 | opt, 类型:Number | null | 参数为查询页码,且每分页固定返回50条数据。 |
vhall_get_record_history_chat_msg | 自助操作 获取直播聊天历史记录 | page, 类型:Number | null | 参数为查询页码。 |
destroy | 自助操作 销毁聊天SDK、播放器SDk |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 发送聊天消息
vhallSDKInstance.chat.sendChat(msg)
// 自助操作 发送自定义聊天消息
vhallSDKInstance.chat.sendCustomEvent(msg)
// 自助操作 获取直播聊天历史记录
vhallSDKInstance.vhall_get_live_history_chat_msg(opt)
// 自助操作 回放拉取历史聊天记录
vhallSDKInstance.chat.vhall_get_record_history_chat_msg(page)
// 自助操作 销毁播放器和文档SDK
vhallSDKInstance.chat.destroy()
互动功能模块
互动工具模块 功能API 说明
调用方式: 在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,模块进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
sendQuestion | 自助操作 发送问答提问内容 | text, 类型:String | null | 提问内容 |
sendSign | 自助操作 签到 | sign_id, 类型:String | null | 在参与签到消息监听事件'startSign'中获取sign_id |
sendQuestionPagerAnswer | 自助操作 发送问卷数据 | opt, 类型:Object | null | 参数为问卷内容.例如:{"survey_id": "8102","data": {"text": {"7722": "少时诵诗书所"},"c": {"7720": {"13275": "选项1"}},"checkbox": {"7721": {"13277": "选项1","13278": "选2"}},"select": {"7723": "19,1188"}}} survey_id问卷id。仅flash类型活动使用 |
sendLotteryInfo | 自助操作 发送中奖信息 | opt, 类型:Object | null | 提交中奖人信息,业务层做校验。例如:{ lottery_id:'抽奖id', name:'中奖人姓名',phone:'手机号', remarks:’备注’ } |
vhall_get_live_history_question_msg | 自助操作 获取直播问答记录 | null | promise | |
vhall_get_history_question_msg | 自助操作 获取回放问答记录 | null | promise | |
vhall_get_history_notice | 自助操作 获取历史公告记录 | page, 类型:Number | promise | |
queryQuestionList | 自助操作 获取问卷数据 | id, 类型:String | promise | 问卷id,** 仅Flash类型活动可用**。通过消息监听事件'questionnaire_push'获取问卷id |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 问答问题发送
vhallSDKInstance.sendQuestion(text)
// 自助操作 签到
vhallSDKInstance.sendSign(sign_id)
// 自助操作 发送问卷数据
vhallSDKInstance.sendQuestionPagerAnswer(opt)
// 自助操作 发送中奖信息
vhallSDKInstance.sendLotteryInfo(opt)
// 自助操作 获取直播问答记录
vhallSDKInstance.vhall_get_live_history_question_msg().then(res => {}).catch(e => {})
// 自助操作 获取回放问答记录
vhallSDKInstance.vhall_get_history_question_msg().then(res => {}).catch(e => {})
// 自助操作 获取历史公告记录
vhallSDKInstance.vhall_get_history_notice(page).then(res => {}).catch(e => {})
// 自助操作 获取问卷数据
vhallSDKInstance.queryQuestionList(id).then(res => {}).catch(e => {})
房间信息模块
房间信息 功能API 说明
调用方式:
在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,进行调用访问。
API 名称 | 功能描述 | 参数 | 返回值 | 备注 |
---|---|---|---|---|
getRoominfo | 自助操作 获取当前活动状态 | null | promise | |
getUserinfo | 自助操作 获取当前用户参会信息 | null | promise | {avatar: '',dataToken: '',forbidchat: 1, is_gag : 1, is_kickout : 1, nick_name : '', role: 'user', userId : '', vss : Object} 备注:forbidchat:全体禁言(仅flash可用),1:开启,0:关闭。 is_gag:是否被禁言,1:禁言,0:未禁言。is_kickout: 是否被踢出,1:踢出,0:未踢出。role: 角色,user:观众,host:主持,guest:嘉宾,assistant:助理 |
updateUserInfo | 自助操作 更新用户昵称 | name, 类型:String | promise | 参数长度小于30 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 自助操作 获取当前活动状态
vhallSDKInstance.getRoominfo().then(res => {}).catch(e => {})
// 自助操作 获取当前用户参会信息
vhallSDKInstance.getUserinfo().then(res => {}).catch(e => {})
// 自助操作 更新用户昵称
vhallSDKInstance.updateUserInfo(name)
全局事件消息对外列表
全局事件说明
调用方式:
在实例化,VhallSDK 之后, 用vhallSDK的实例句柄,用$on方法进行使用。
事件 名称 | 功能描述 | 参数 | 返回值 | 备注 | ||||
---|---|---|---|---|---|---|---|---|
ready | 初始化完成 | null | null | |||||
playerReady | 播放器初始化成功 | null | null | |||||
streamOver | Flash 类型活动,直播结束 | null | null | 仅Flash 类型活动会派发此事件 | ||||
publishStart | Flash 类型活动,直播开始事件 | null | null | 仅Flash 类型活动会派发此事件 | ||||
live_start | H5类型活动 ,直播开始事件 | null | null | 仅H5 类型活动会派发此事件 | ||||
live_over | H5类型活动 ,直播结束事件 | null | null | 仅H5 类型活动会派发此事件 | ||||
userOnline | 用户上线通知 | callback(datat), 类型:Function | data,类型:Object | data.data = {hide: false,socket_id: "1TBpcjxU2mf2ye6vDy-r",type: "Join"} | ||||
userOffline | 用户离线通知 | callback(data), 类型:Function | data,类型:Object | data.data = {hide: false,socket_id: "94TPRGTW4LFT2KstDy-V",type: "Leave"} | ||||
chatMsg | 聊天消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
sendCustomEvent | 发送自定义消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
customEvent | 自定义广播消息监听 | callback(data), 类型:Function | data,类型:Object | 返回消息体 | ||||
question_answer_open | 开启问答 | callback(data), 类型:Function | data,类型:Object | data.data = {nick_name: '主持人',type: 'question_answer_open' } | ||||
question_answer_close | 关闭问答 | callback(data) , 类型:Function | data,类型:Object | data.data = {nick_name: '主持人',type: 'question_answer_close' } | ||||
question_answer_commit | 主讲人回复问答消息 | callback(data) , 类型:Function | data,类型:Object | 主讲人回复消息 | ||||
question_answer_backout | 主讲人撤回问答回复 | callback(data) , 类型:Function | data,类型:Object | data.data = {question_answer_id: "4137",type: "question_answer_backout"} | ||||
startSign | 开始签到环节 | callback(data) , 类型:Function | data,类型:Object | data.data = {room_id:"lss_32f5a298",sign_creator_avatar: "//a.com/15.jpeg",sign_creator_id:"16420899",sign_creator_nickname: "Batur",sign_id: "19061",sign_show_time: "30",type: "sign_in_push"} | ||||
endSign | 主持人结束签到 | callback(data) , 类型:Function | data,类型:Object | data.data = {room_id:"lss_32f5a298",sign_creator_avatar: "//a.com/15.jpeg",sign_creator_id:"16420899",sign_creator_nickname: "Batur",sign_id: "19061",sign_show_time: "30",type: "sign_end"} | ||||
sendSign | 签到 | callback(data), 类型:Function | data,类型:Object | data = {code:200} | ||||
questionnaire_push | 打开问卷消息 | callback(data), 类型:Function | data,类型:Object | data.data = {nick_name: "Batur",questionnaire_id: "271631",room_join_id: "16420899",room_role: "1",type: "questionnaire_push"} questionnaire_id:问卷id room_role:房间角色 1主持人 2观众 3嘉宾 4助理 | ||||
questionarie_submit_success | 问卷提交成功 | callback(data), 类型:Function | data,类型:Object | data.data = {naire_id: 问卷id} | ||||
questionarie_submit_error | 问卷服务提交失败 | callback(data), 类型:Function | data,类型:Object | 返回错误信息error | ||||
questionPagerList | 获取问卷列表 | null | null | 返回问卷数据data | ||||
lotteryStart | 开始抽奖 | callback(data), 类型:Function | data,类型:Object | data.data = {lottery_creator_avatar: "//ll.com/upload/15.jpeg",lottery_creator_id: "16420899",lottery_creator_nickname: "Batur",lottery_id: "6904",lottery_number: "1",lottery_status: 0,lottery_type: "1",room_id: "lss_32f5a298",type: "lottery_push"}lottery_id:奖品id,lottery_number:中奖人数lotteryResultNotice | 结束抽奖 | null | callback(datat), 类型:Function | data.data = ["lottery_winners" : []] 返回中间人数组 |
disadbleChat | 禁言 | callback(datat), 类型:Function | data,类型:Object | data.data = {nick_name: "dazhen" ,role_name: "2" ,room_join_id: "16420899" ,target_id: "16422570" ,type: "disable"} target_id:被禁言成员id | ||||
permitChat | 恢复禁言 | callback(data), 类型:Function | data,类型:Object | 消息体说明:{data: {target_id: "16422570", type: "permit"} }target_id: 取消禁言成员id | ||||
forbidChat | 全体禁言 | callback(data), 类型:Function | data,类型:Object | data.data = {allStatus: 1} allStatus:1为全员禁言,0为恢复全员禁言 | ||||
kickoutrestore | 恢复踢出 | null | null | |||||
kickout | 踢出 | callback(data), 类型:Function | data,类型:Object | data.data = {role_name: "2", room_join_id: "16420899", target_id: "16422570", type: "room_kickout"} target_id: 踢出id | ||||
DocOpenStatus | 文档白板开关状态 | callback(data), 类型:Function | data,类型:String | 该字段用来监听主播是否开启白板或者文档对观众展示,但不能用于判断白板和文档之前切换场景。备注:on: 开启, off: 关闭 | ||||
DocAndWhiteStatus | 当前开启白板/文档 | callback(data), 类型:Function | data,类型:String | 该字段用来监听当前是显示文档还是白板,但不能用于判断白板和文档是否对用户展示的场景。备注:document: 当前开启文档, board: 当前开启白板 | ||||
room_announcement | 收到公告消息 | callback(data), 类型:Function | data,类型:Object | 返回数据 | ||||
UpdateUser | 更新用户信息 | null | null | |||||
hostNotice | 主持人下线消息 | null | null | |||||
error | 错误日志 | null | callback(data),类型:Object | 返回 {msg, data} msg是错误提示信息, data是错误消息体包含code,msg,data信息 |
代码示例
var vhallSDKInstance = new VhallSDK({
... // 微吼SDK 初始化参数
})
// 播放器初始化成功
vhallSDKInstance.$on('ready', () => {
})
// 播放器初始化成功
vhallSDKInstance.$on('playerReady', () => {
})
// 直播停止推流
vhallSDKInstance.$on('streamOver', () => {
})
// 直播开始推流
vhallSDKInstance.$on('publishStart', () => {
})
// H5直播开始事件
vhallSDKInstance.$on('live_start', () => {
})
// H5直播结束事件
vhallSDKInstance.$on('live_over', () => {
})
// 用户上线通知
vhallSDKInstance.$on('userOnline', (data) => {
})
// 用户离线通知
vhallSDKInstance.$on('userOffline', (data) => {
})
// 聊天消息监听
vhallSDKInstance.$on('chatMsg', (data) => {
})
// 发送自定义消息监听
vhallSDKInstance.$on('sendCustomEvent', (data) => {
})
// 自定义广播消息监听
vhallSDKInstance.$on('customEvent', (data) => {
})
// 开启问答
vhallSDKInstance.$on('question_answer_open', (data) => {
})
// 关闭问答
vhallSDKInstance.$on('question_answer_close', (data) => {
})
// 主讲人回复问答消息
vhallSDKInstance.$on('question_answer_commit', (data) => {
})
// 主讲人撤回问答回复
vhallSDKInstance.$on('question_answer_backout', (data) => {
})
// 开始签到环节
vhallSDKInstance.$on('startSign', (data) => {
})
// 签到
vhallSDKInstance.$on('sendSign', (data) => {
})
// 打开问卷消息
vhallSDKInstance.$on('questionnaire_push', (data) => {
})
// 问卷提交成功
vhallSDKInstance.$on('questionarie_submit_success', (data) => {
})
// 问卷服务提交失败
vhallSDKInstance.$on('questionarie_submit_error', (error) => {
})
// 获取问卷列表
vhallSDKInstance.$on('questionPagerList', (data) => {
})
// 开始抽奖
vhallSDKInstance.$on('lotteryStart', (data) => {
})
// 结束抽奖
vhallSDKInstance.$on('lotteryResultNotice', (data) => {
})
// 禁言
vhallSDKInstance.$on('disableChat', (data) => {
})
// 恢复禁言
vhallSDKInstance.$on('permitChat', (data) => {
})
// 全体禁言1为全员禁言,0为恢复全员禁言
vhallSDKInstance.$on('forbidChat', (data) => {
})
// 恢复踢出
vhallSDKInstance.$on('kickoutrestore', () => {
})
// 踢出
vhallSDKInstance.$on('kickout', (data) => {
})
// 开启或关闭白板文档
vhallSDKInstance.$on('DocOpenStatus', (data) => {
})
// 白板文档间切换
vhallSDKInstance.$on('DocAndWhiteStatus', (data) => {
})
// 收到公告消息
vhallSDKInstance.$on('room_announcement', (data) => {
})
// 更新用户信息
vhallSDKInstance.$on('UpdateUser', () => {
})
// 错误日志统一对外消息
vhallSDKInstance.$on('error', ({msg, data}) => {
})
// 主持人下线消息
vhallSDKInstance.$on('hostNotice', () => {
})
全局错误码列表
VHALL_SDK客户端错误代码
使用方式
通过 VhallSDK 初始化后的,实例句柄。 增加 error 事件监听即可。
错误码 | 说明 |
---|---|
10000 | 消息体格式不对 |
10001 | 消息体为空 |
10002 | 当前用户被禁言 |
10003 | 聊天输入不能超过140个字符 |
10004 | 当前已开启全员禁言 |
10005 | 当前活动不是直播状态 |
10006 | 当前活动未开启问答 |
10007 | 当前用户被踢出 |
20000 | 接口请求成功 |
20005 | 接口请求失败 |
50400 | 用户身份认证错误 |
50401 | 用户发送消息频次超过限制 |
50402 | 活动xxx发送消息频次超过限制 |
50403 | 自定义广播消息内容长度超过限制 |
示例代码
var vhallInstance = new VhasllSDK ({
xxx
})
// 监听全局错误事件
vhallInstance.$on('error', (data) => {
console.log(data)
})
SDKDemo
直播SDK(旧版)
直播SDK准备
依赖库
本SDK依赖于JQuery库,请在需要引入JQuery的页面按以下代码示例进行引入,对JQuery版本没有要求
引入JS文件
在需要调用SDK的页面插入以下代码以引入JS文件:
注:支持https
SDK初始化
使用以下的方法和参数进行SDK的初始化以及权限的验证
注:JSSDK已支持视频播放,所以不建议再和网页嵌入混合使用,请已这样使用的用户尽快改为只使用JSSDK,且以上参数的email为空即可
使用例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
html,
body {
height: 100%;
}
.player-container {
height: 240px;
position: relative;
z-index: 3;
}
.video {
height: 240px;
background: #000;
}
.doc {
height: 260px;
width: 100%;
margin-top: 36px;
position: absolute;
z-index: 3;
}
.send-box {
position: absolute;
bottom: 0px;
height: 70px;
width: 100%;
color: #bcbcbc;
}
.send-box textarea {
height: 40px;
width: 80%;
resize: none;
outline: none;
border: none;
padding: 10px;
color: #bcbcbc;
box-sizing: border-box;
margin: 20px;
border: solid 1px #666;
}
.send-box .face {
display: inline-block;
position: absolute;
right: 70px;
width: 80px;
height: 22px;
background-color: red;
margin-top: 30px;
text-align: center;
}
#board-container {
height: 600px;
margin-top: 0px
margin-top: 20px;
height: 260px;
width:100%;
z-index: 3;
display:flex;
align-items: center;
justify-content: center;
}
#board-container.on {
display: none;
}
#questionarie{
background: white;
}
</style>
</head>
<body>
<div class="player-container">
<div class="video" id="video"></div>
<div class="doc" id="doc"></div>
<div id="board-container">
</div>
</div>
<div class="send-box">
<a id='face' href="javascript:;" class="face">表情</a>
<textarea id="mywords"></textarea>
</div>
</body>
<script src="http://cnstatic01.e.vhall.com/3rdlibs/jquery/1.11.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://cnstatic01.e.vhall.com/jssdk/dist/2.6.7/vhallSDK.js"></script>
<script>
VHALL_SDK.init({
account : 'xxxxxxxxxx',
username : 'xxxxxxxxxx',
roomid :'740034398',
app_key :'xxxxxxxxxx',
signedat :'1533552695000',
sign :'a2b02bceec66r7384ba3e162a3b3c0d3e9',
facedom :'#face',
textdom : '#mywords',
videoContent : '#videoId',
docContent: '#docId',
protocol:'https',
wrapper:"#board-container"
});
</script>
</html>
以下参数sign由PHP生成,其生成规则如下:
序号 | 规则 |
---|---|
1 | 按参数名升序排列 |
2 | 然后按参数名1+参数值+参数名2+参数值拼接 |
3 | 在首尾各加上secret_key |
4 | 计算md5作为sign |
参与签名生成的字段如下:
名称 | 备注 |
---|---|
roomid | 活动id |
account | 账户 |
username | 用户名 |
app_key | 授权的key |
signedat | 时间戳 |
示例如下
VHALL_SDK初始化时服务端返回的错误码:
错误码 | 说明 |
---|---|
1001 | 活动不存在 |
1002 | 用户昵称不能空 |
1003 | 用户id不能空 |
1004 | appkey不存在 |
1005 | 签名验证超时 |
1006 | 签名错误 |
1007 | 当前活动不是该appkey下所属活动 |
1008 | 超出套餐使用量 |
1009 | 该视频正在转码中 |
1010 | 该视频转码失败 |
1011 | 该视频正在审核中 |
1012 | 该视频已下线,有疑问请联系客服 |
*注:对上述内容中所提appkey、app_key以及secret_key三个参数的说明:
appkey和app_key均表示添加应用后所得到的AppKey列对应的值
secret_key表示添加应用后所得到的SecretKey(注意与AppSecretKey区分)列对应的值
上文中的signedat跟“API调用”中“签名机制”的signed_at 不一致,不能通用
直播调用
获取直播功能信息
聊天和问答需要获取用户标识与头像,需提前使用第三方创建用户接口创建用户,如传入的第三方用户信息未匹配到用户标识,将自动进行创建,并默认为游客以及使用微吼的默认头像。目前聊天和问答模块只支持观看端,如需要进行管理操作(禁言、踢出、过滤以及回答等功能),请前往微吼平台上进行操作
主要调用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准备就绪后触发事件
直播SDK DEMO
点播(Flash)v1.0.0
点播SDK准备
依赖库
<script src="http://cnstatic01.e.vhall.com/3rdlibs/jquery/1.11.2/jquery.min.js" type="text/javascript"></script>
引入JS文件
在需要调用SDK的页面插入以下代码以引入JS文件:
<script type="text/javascript" src="http://cnstatic01.e.vhall.com/demand-upload-jssdk/dist/1.0.0/vhallDemandSDK.js"></script>
点播SDK权限验证
权限验证
请使用以下的方法和参数进行SDK的权限的验证
根据appKey和secretKey生成sign 生成sign的具体规则如下,其生成规则如下:
序号 | 规则 |
---|---|
1 | 按参数名升序排列 |
2 | 然后按参数名1+参数值+参数名2+参数值拼接 |
3 | 在首尾各加上secret_key |
4 | 计算md5作为sign |
示例:
// 该代码为客户端DEMO代码 仅供参考(生产环境请参考代码下面的服务端代码)
function sign(appKey, secretKey) {
var param = {};
return {
doSign :function(){
param.auth_type = 2;
param.app_key = appKey;
param.signed_at = new Date().getTime().toString().substr(0, 10);
var paramArray = getArray(param);
var signStr = secretKey;
for(var i =0; i < paramArray.length; i ++) {
signStr += paramArray[i];
}
signStr += secretKey;
return {
str : hex_md5(signStr), /* 用MD5加密得到最终sign */
time : param.signed_at /* 获取到sign的时间戳 */
}
}
}
function getArray(paramObj) {
var paramArray = [];
var length = 0;
for (var i in paramObj) {
paramArray[length] = i + paramObj[i];
length += 1;
}
paramArray.length = length;
return paramArray.sort();
}
}
对上述内容中所提appkey、app_key以及secret_key三个参数的说明:
appkey和app_key均表示添加应用后所得到的AppKey列对应的值
secret_key表示添加应用后所得到的SecretKey(注意与AppSecretKey区分)列对应的值
appKey和secretKey获取方法获取请参见 [[http://e.vhall.com/home/vhallapi/instructions ]]
服务签名端代码请参考 [[http://e.vhall.com/home/vhallapi/instructions]]
点播上传
初始化dom
/**
*/
<input type="file" id="upload"/>
点播初始化
/**
* 调用 vhallDemandSDK 方法
*/
vhallDemandSDK('#upload',{
params: {
sign:sign, /**sign**/
signed_at:time, /**获取sign的时间戳**/
app_key:appKey
},
ready: function() {
/**
* 初始化完成的回调函数
**/
},
beforeUpload:function() {
/**
* 准备中...(文件进行MD5转换过程)
**/
},
progress:function(percent, file){
/**
* 上传中...'
* 'percent 上传进度百分比'
* 'file 上传文档具体信息
**/
},
uploadSuccess: function(res){
/**
* 上传成功!'
* 'res 成功返回的回放ID records_id 和 活动ID webinar_id
**/
},
error: function(msg,file,e){
/**
* 上传出错'
* 'msg 错误返回的状态码信息'
**/
}
})
错误状态码对应信息参见消息体
错误码 | 说明 |
---|---|
10000 | 当前浏览器不支持断点上传 |
10001 | 请传入类似于"#id"选择器 |
10003 | 当前传入的dom不是input file |
10004 | 不支持该文件格式 |
10005 | 上传文件大于10GB |
10006 | 获取上传临时授权失败 |
10008 | 没有上传权限 |
10009 | 回放标题不能为空 |
11010 | 活动标题不能为空 |
11011 | 视频路径不能为空 |
10104 | 子账号信息不存在 |
点播SDK DEMO
点播(H5)v2.0.0
点播(H5)SDK准备
依赖库
<script src="http://cnstatic01.e.vhall.com/3rdlibs/jquery/1.11.2/jquery.min.js" type="text/javascript"></script>
注:
1、SDK Demo中引入的依赖库跟此处略有不同,各位开发者可参照自行调整。
微吼提供两个在线CDN版本库,分别为:
http://cnstatic01.e.vhall.com/3rdlibs/jquery/1.11.2/jquery.min.js
http://cnstatic01.e.vhall.com/3rdlibs/jquery/3.2.1/jquery.min.js
2、不同的依赖库,CDN对于页面加载打开的速度有一定的影响,各位开发者注意。
引入JS文件
在需要调用SDK的页面插入以下代码以引入JS文件:
<script type="text/javascript" src="http://cnstatic01.e.vhall.com/demand-upload-jssdk/dist/2.0.0/vhallDemandSDK.js"></script>
点播(H5)SDK权限验证
权限验证
请使用以下的方法和参数进行SDK的权限的验证
根据appKey和secretKey生成sign 生成sign的具体规则如下,其生成规则如下:
序号 | 规则 |
---|---|
1 | 按参数名升序排列 |
2 | 然后按参数名1+参数值+参数名2+参数值拼接 |
3 | 在首尾各加上secretKey |
4 | 计算md5作为sign |
示例:
// 该代码为客户端DEMO代码 仅供参考(生产环境请参考代码下面的服务端代码)
function sign(app_key, secret_key) {
var param = {};
return {
doSign :function(){
param.auth_type = 2;
param.app_key = app_key; /* 入参-此处取自地址栏参数appKey */
param.signed_at = new Date().getTime().toString().substr(0, 10);
var paramArray = getArray(param);
var signStr = secret_key; /* 入参-此处取自地址栏参数secretKey */
for(var i =0; i < paramArray.length; i ++) {
signStr += paramArray[i];
}
signStr += secret_key;
return {
str : hex_md5(signStr), /* 用MD5加密得到最终sign */
time : param.signed_at /* 获取到sign的时间戳 */
}
}
}
function getArray(paramObj) {
var paramArray = [];
var length = 0;
for (var i in paramObj) {
paramArray[length] = i + paramObj[i];
length += 1;
}
paramArray.length = length;
return paramArray.sort();
}
}
对上述内容中所提appKey、secretKey 二个参数的说明:
appKey表示添加应用后所得到的AppKey列对应的值
secretKey表示添加应用后所得到的SecretKey(注意与AppSecretKey区分)列对应的值
appKey和secretKey获取方法获取请参见 [http://e.vhall.com/home/vhallapi/instructions]
服务签名端代码请参考 [http://e.vhall.com/home/vhallapi/instructions]
点播(H5)上传
初始化dom
/**
*/
<input type="file" id="upload"/>
点播初始化
/**
* 调用 vhallDemandSDK 方法
*/
vhallDemandSDK('#upload',{
params: {
sign:sign, /**sign**/
signed_at:time, /**获取sign的时间戳**/
app_key:appKey,
sdkChildID:sdkChildID, /**子账号ID,地址栏可传可不传**/
webinarName: webinarName, /**点播活动名称,可传可不传**/
},
ready: function() {
/**
* 初始化完成的回调函数
**/
},
beforeUpload:function() {
/**
* 准备中...(文件进行MD5转换过程)
**/
},
progress:function(percent, file){
/**
* 上传中...'
* 'percent 上传进度百分比'
* 'file 上传文档具体信息
**/
},
uploadSuccess: function(res){
/**
* 上传成功!'
* 'res 成功返回的回放ID records_id 和 活动ID webinar_id
**/
},
error: function(msg,file,e){
/**
* 上传出错'
* 'msg 错误返回的状态码信息'
**/
}
})
错误状态码对应信息参见消息体
错误码 | 说明 |
---|---|
10000 | 当前浏览器不支持断点上传 |
10001 | 请传入类似于"#id"选择器 |
10003 | 当前传入的dom不是input file |
10004 | 不支持该文件格式 |
10005 | 上传文件大于5GB |
10006 | 获取上传临时授权失败 |
10008 | 当前账号无上传权限 |
15001 | 获取用户信息失败 |
15002 | 获取微吼云信息失败 |
点播(H5)SDK DEMO
版本更新记录
jssdk V2.6.0更新内容
- 新增问卷提交(成功,失败)通知
- 新增播发器“跑马灯”支持 -- 需在控制台设置跑马灯信息(jssdk读取控制设置的跑马灯)
- 新增播发器“水印”支持 -- 需在控制台设置水印信息(jssdk读取控制设置的水印)
- 新增“抽奖”消息通知 -- 抽奖开始,抽奖结束(是否中奖)及设置发送中奖信息
jssdk V2.6.1更新内容
- 修复flash回放文档消息时间一样导致的文档不显示问题
jssdk V2.6.2更新内容
- 修复新老消息异常打印时,大量聊天数据触发console导致的页面卡顿问题
jssdk V2.6.3更新内容
1,以下5个api方法支持Promise返回
- 获取直播聊天历史记录(vhall_get_live_history_chat_msg())
- 获取直播问答记录(vhall_get_live_history_question_msg())
- 获取直播,回放问答记录 (vhall_get_history_question_msg())
- 回放拉取历史聊天 (vhall_get_record_history_chat_msg(curr_page))
- 获取历史直播公告记录 (vhall_get_history_notice(curr_page))
2,Flash聊天支持图片消息
图片消息样例:
{
"to": "",
"user_role": "host",
"role_name": "host",
"user_name": "杨勇",
"nickname": "杨勇",
"account_id": "16420818",
"user_id": "1258770",
"app": "vhall",
"avatar": "http://t-alistatic01.e.vhall.com/upload/user/avatar/b6/40/b6407a71146c89a2e335925981cbd5bc.jpg",
"data": {
"arrImg": [
"//t-alistatic01.e.vhall.com/upload/webinars/chat/85/77/85771aa405f311ba83b0d4d7e1b4faf0.jpg",
"//t-alistatic01.e.vhall.com/upload/webinars/chat/2e/ee/2eeea45977e8e825da2bbdd5a1d58326.jpg"
],
"text": ""
},
"time": "2020-04-02 18:28:50",
"role": "host",
"event": "msgImg",
"room": "691033756",
"real_room": "691033756",
"channel": "691033756",
"content": ""
}
jssdk V2.6.4更新内容如下:
- 解决活动预约时重复init重复创建占位图问题
- 新增queryRoominfo方法提供实时查询活动信息(getRoominfo是初始化时信息)
- 针对直播刚开始视频清晰度列表只有原画进行兼容
- 增加主持端上下线消息通知(监听hostNotice)
- 预约时增加消息通知(publishStart开始推流消息),用于解决用户无法知道直播已经开始的问题
- getRoominfo() 新增活动封面img_url字段,方便用户进行自定义处理
- H5活动中jssdk观看端控制台查看主持人发送的聊天中,role返回的值是“user”
使用样例:
// 监听主持人上下线消息
VHALL_SDK.on('hostNotice', function (msg) {
if (msg.type == 'online') {
console.log('主持人上线');
} else {
console.log('主持人下线');
}
});
// 监听直播开始
VHALL_SDK.on('publishStart', function (msg) {
console.log('活动开始推流');
});
VHALL_SDK.queryRoominfo().then(res => {
console.log('----实时通过接口获取活动信息----');
console.log(res)
})
jssdk V2.6.5更新内容如下:
- H5解决回放状态时,播放器进度条点击对应时间后有偏差的问题,升级底层播放器到2.1.7
- H5解决调用VHALL_SDK.destroy()后,控制台发现还在打拉流日志的问题
- Flash解决调用VHALL_SDK.destroy()后,清除定时器
jssdk V2.6.6更新内容如下:
- 解决Flash活动wap端获取清晰度消息canPlayDefinitions触发两次问题
jssdk V2.6.7更新内容如下:
- 预约时通过监听publishStart,开始直播之后重新初始化sdk,预约消息恢复导致不能收到聊天广播
jssdk V2.6及其子版本相关更新说明
jssdk V2.6.9更新内容如下:
- 解决使用JS SDK观看H5活动,导致控制台并发中1个人变成2个人的问题;
jssdk V2.6.8更新内容如下:
- H5活动,直播和回放时,支持观众可以对文档自由翻页。当有权限操作文档的人翻页时,该观众的文档回到当前文档位置;
- 触发resize事件,文档部分新增自动调整文档大小功能
jssdk V2.6.7更新内容如下:
- 预约时通过监听publishStart,开始直播之后重新初始化sdk,预约消息恢复导致不能收到聊天广播
jssdk V2.6.6更新内容如下:
- 解决Flash活动wap端获取清晰度消息canPlayDefinitions触发两次问题
jssdk V2.6.5更新内容如下:
- H5解决回放状态时,播放器进度条点击对应时间后有偏差的问题,升级底层播放器到2.1.7
- H5解决调用VHALL_SDK.destroy()后,控制台发现还在打拉流日志的问题
- Flash解决调用VHALL_SDK.destroy()后,清除定时器
jssdk V2.6.4更新内容如下:
- 解决活动预约时重复init重复创建占位图问题
- 新增queryRoominfo方法提供实时查询活动信息(getRoominfo是初始化时信息)
- 针对直播刚开始视频清晰度列表只有原画进行兼容
- 增加主持端上下线消息通知(监听hostNotice)
- 预约时增加消息通知(publishStart开始推流消息),用于解决用户无法知道直播已经开始的问题
- getRoominfo() 新增活动封面img_url字段,方便用户进行自定义处理
- H5活动中jssdk观看端控制台查看主持人发送的聊天中,role返回的值是“user”
使用样例:
// 监听主持人上下线消息
VHALL_SDK.on('hostNotice', function (msg) {
if (msg.type == 'online') {
console.log('主持人上线');
} else {
console.log('主持人下线');
}
});
// 监听直播开始
VHALL_SDK.on('publishStart', function (msg) {
console.log('活动开始推流');
});
VHALL_SDK.queryRoominfo().then(res => {
console.log('----实时通过接口获取活动信息----');
console.log(res)
})
jssdk V2.6.3更新内容
1,以下5个api方法支持Promise返回
- 获取直播聊天历史记录(vhall_get_live_history_chat_msg())
- 获取直播问答记录(vhall_get_live_history_question_msg())
- 获取直播,回放问答记录 (vhall_get_history_question_msg())
- 回放拉取历史聊天 (vhall_get_record_history_chat_msg(curr_page))
- 获取历史直播公告记录 (vhall_get_history_notice(curr_page))
2,Flash聊天支持图片消息
图片消息样例:
{
"to": "",
"user_role": "host",
"role_name": "host",
"user_name": "杨勇",
"nickname": "杨勇",
"account_id": "16420818",
"user_id": "1258770",
"app": "vhall",
"avatar": "http://t-alistatic01.e.vhall.com/upload/user/avatar/b6/40/b6407a71146c89a2e335925981cbd5bc.jpg",
"data": {
"arrImg": [
"//t-alistatic01.e.vhall.com/upload/webinars/chat/85/77/85771aa405f311ba83b0d4d7e1b4faf0.jpg",
"//t-alistatic01.e.vhall.com/upload/webinars/chat/2e/ee/2eeea45977e8e825da2bbdd5a1d58326.jpg"
],
"text": ""
},
"time": "2020-04-02 18:28:50",
"role": "host",
"event": "msgImg",
"room": "691033756",
"real_room": "691033756",
"channel": "691033756",
"content": ""
}
jssdk V2.6.2更新内容
- 修复新老消息异常打印时,大量聊天数据触发console导致的页面卡顿问题
jssdk V2.6.1更新内容
- 修复flash回放文档消息时间一样导致的文档不显示问题
jssdk V2.6.0更新内容
- 新增问卷提交(成功,失败)通知
- 新增播发器“跑马灯”支持 -- 需在控制台设置跑马灯信息(jssdk读取控制设置的跑马灯)
- 新增播发器“水印”支持 -- 需在控制台设置水印信息(jssdk读取控制设置的水印)
- 新增“抽奖”消息通知 -- 抽奖开始,抽奖结束(是否中奖)及设置发送中奖信息
JSSDK v3.0.7 更新记录
【优化】优化日志输出
JSSDK v3.0.6 更新记录
【更新】升级播放器SDK,解决微信中播放器进度条被手机自带进度条劫持,导致显示不正确问题
JSSDK v3.0.5 更新记录
【更新】从3.0.5版本起,获取直播和回放历史聊天信息,统一使用vhall_get_live_history_chat_msg方法,并且此方法仅支持分页传参,查询分页数据。
vhall_get_record_history_chat_msg 方法从3.0.5版本起将不再支持。
JSSDK v3.0.4 更新记录
【更新】 JSSDK完成Flash活动去flash化。即JSSDK观看flash活动不再需要FLASH插件就可播放,并且Flash活动下JSSDK支持对播放器相关操作
【更新】 JSSDK完成对IE10, IE11兼容
【更新】 SDK增加全局destroy方法,同时销毁播放器SDK,聊天SDK。取消播放器SDK单独销毁方法destroy
【修复】 初始化JSSDK填写邮箱后,后台数据未展示邮箱信息
JSSDK v3.0.2 更新记录
【修复】 修复播放器控制按钮状态切换
【修复】 SDK初始化完成事件监听ready
【修复】 SDK播放器初始化完成事件监听playerReady
JSSDK v3.0.1 更新记录
【新增】 兼容SDK3.0版本前SDK使用方式
【新增】 SDK增加错误提示,提高用户体验
【修复】 SDK内根据http泛协议进行自动转换
【修复】 SDK在Edge浏览器中兼容问题
JSSDK v3.0 更新记录
【新增】 全新的 API 使用方法 ( 不兼容2.6.9之前版本 ,2.6.9 兼容API开发中 )
【新增】 完善的功能模块划分API 文档
【新增】 移动端文档演示笔触功能
【新增】 H5类型活动 清晰度切换功能
【修复】 JSSDK用户与APP端用户聊天互通时角色标识的问题
【修复】 文档翻页后使用jssdk进入直播间,文档不显示当前页
【修复】 JSSDK用户在成员列表中显示上麦按钮的BUG
【优化】 JSSDK 报错相关信息
【优化】 剔除SDK 对JQuery 类库的依赖
【优化】 播放器线路切换机制
【优化】 内部架构及性能相关问题
JSSDK v3.1.1 更新记录
【新增】历史聊天消息中增加图片字段,用于图片消息回显
【优化】优化播放封面在个别机型不展示的问题
JSSDK v3.1.0 更新记录
【新增】从3.1版本起支持两种延签方式RSA和MD5
【新增】初始化新增password字段,处理第三方k值或已有用户密码问题
【新增】初始化新增record_id字段,播放指定回放(当前活动如果在直播,此字段传值正确,将默认播放该回放)
【新增】初始化新增sign_type字段,表示验签方式,0:MD5(默认),1:RSA (用户需要在业务中自行处理RSA验签格式等拼接)
【新增】新增文档开关监听DocOpenStatus。 on: 开启, off: 关闭
【新增】新增文档白板切换监听DocAndWhiteStatus。 document : 开启文档, board : 开启白板
【优化】播放器进度条长显,默认4s自动隐藏,滑动触发
【修复】设置回放时间,不能按预期显示问题