开始

引入微吼直播SAAS jssdk


<script src="//cnstatic01.e.vhall.com/jssdk/dist/3.1.0/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
email 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")

require './vendor/autoload.php';
use phpseclib\Crypt\RSA;
 
/**
 * base64url_encode
 * @param $data
 * @return string
 */
function base64url_encode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
 
/**
 * base64url_decode
 * @param $data
 * @return bool|string
 */
function base64url_decode($data) {
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
 
//应用信息
$app_key = 'user_app_key';
$rsa_private_key = '';
 
//参与签名数据
$params = [
	// === 公共参数 ===
	"app_key" => $app_key,
	"sign_type" => 1, //签名类型:0-MD5  1-RSA
	"signed_at" => time(),
	// === 业务接口参数 ===
	"webinar_id" => "123456",
];
 
// 按参数名升序排列
ksort($params);
// 将键值组合
array_walk($params, function (&$value, $key) {
	$value = $key . $value;
});
 
//加密
$rsa = new RSA();
$rsa->loadKey($rsa_private_key);
$rsa->setSignatureMode(RSA::ENCRYPTION_PKCS1);
$rsa->setHash('md5');
$signString = md5(implode('', $params));
$sign = base64url_encode($rsa->sign($signString));

浏览器兼容性

浏览器 版本 备注
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页面嵌入开发
其他手机浏览器 绝大部分支持 如遇问题请联系商务或邮件我们

其他未涉及浏览器可能出现兼容性问题。 问题反馈联系客服