JS互动SDK使用
- 互动SDK主要分为 互动实例创建与销毁、实例事件监听、实例接口使用、全局定义,四大部分。
互动实例
- 此SDK可支持创建多个实例,每一个实例对应一个互动房间。
- 当与其它SDK同时使用时,必须待其它SDK实例化成功后,再实例化此SDK。
创建实例
// 创建实例参数
var opt = {
inavId: "", // 互动房间ID,必填
roomId:"", // 如需开启旁路,必填
appId: "", // 互动应用ID,必填
accountId:"", // 第三方用户ID,必填
token:"", // access_token,必填
role: VhallRTC.MASTER // 用户身份
};
// 成功回调
var vhallrtc;
var success = function (event) {
// 实例句柄
vhallrtc = event.vhallrtc;
// 房间内远端流Id列表
var currentStreams = event.currentStreams;
/* 房间内远端流Id列表
[
{
streamId, // 远端流ID
accountId // 远端用户ID
}
]
*/
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
// 创建实例
VhallRTC.createInstance(opt, success, failure);
-
2.1.7以上版本,不存在用户身份概念,可不传入role参数
- accountId 参数必须为英文字符,不能为中文。
- VhallRTC 为SDK全局句柄。VhallRTC.MASTER 为全局定义。
- vhallrtc 为当前传入互动房间实例句柄,故以下所有操作均必须在成功回调后执行。
- 失败回调内错误原因,详见错误码,下同。
销毁实例
//预留参数
var opt = {};
// 成功回调
var success = function (event) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
// 销毁实例
vhallrtc.destroyInstance(opt, success, failure);
实例事件监听
- 在调用实例接口前,建议全部监听以下互动事件。
事件监听
vhallrtc.on(event , handler); // event 为事件 , handler 为处理函数
房间连接出错事件
vhallrtc.on(VhallRTC.EVENT_ROOM_ERROR, function() {
console.log(event); // { event: VhallRTC.EVENT_ROOM_ERROR, data:{} }
});
房间关闭事件
vhallrtc.on(VhallRTC.EVENT_ROOM_CLOSE, function() {
console.log(event); // { event: VhallRTC.EVENT_ROOM_CLOSE, data:{} }
});
审核上麦事件
vhallrtc.on(VhallRTC.EVENT_ROOM_AUTH, function(event) {
console.log(event); // { event: VhallRTC.EVENT_ROOM_AUTH, data:{ userId : "xxxxx" , status: 0 } }
});
- status: 1 为上麦 2 为下麦 3 为拒绝上麦
添加用户进黑名单事件
vhallrtc.on(VhallRTC.EVENT_ROOM_BLACKLIST, function(event) {
console.log(event); // { event: VhallRTC.EVENT_ROOM_BLACKLIST, data:{ userId : "xxxxx" } }
});
被邀请上麦事件
vhallrtc.on(VhallRTC.EVENT_ROOM_INVITED, function(event) {
console.log(event); // { event: VhallRTC.EVENT_ROOM_INVITED, data:{ userId : "xxxxx" } }
});
- 当某用户被邀请上麦时触发此事件
邀请上麦回复事件
vhallrtc.on(VhallRTC.EVENT_ROOM_CALLBACK, function(event) {
console.log(event); // console.log(event); // { event: VhallRTC.EVENT_ROOM_CALLBACK, data:{ userId:"", status: 1 } }
});
- 当被邀请用户回复了邀请事件时触发此事件
- status: 1 同意上麦 2 下麦 3 拒绝上麦
申请上麦事件
vhallrtc.on(VhallRTC.EVENT_ROOM_APPLY, function(event) {
console.log(event); // { event: VhallRTC.EVENT_ROOM_APPLY, data: { userId } }
});
用户加入房间事件
vhallrtc.on(VhallRTC.EVENT_ROOM_JOIN, function(event) {
console.log(event); // object 类型 { event: VhallRTC.EVENT_ROOM_JOIN , data:{ userId : "xxxxx" } }
});
用户离开房间事件
vhallrtc.on(VhallRTC.EVENT_ROOM_LEAVE, function(event) {
console.log(event); // object 类型 { event: VhallRTC.EVENT_ROOM_LEAVE , data:{ userId : "xxxxx" } }
});
推拉流异常事件
vhallrtc.on(VhallRTC.EVENT_REMOTESTREAM_FAILED, function(event) {
console.log(event); // { event: VhallRTC.EVENT_REMOTESTREAM_FAILED , data:{ streamId:""} }
});
远端流添加事件
vhallrtc.on(VhallRTC.EVENT_REMOTESTREAM_ADD, function(event) {
console.log(event);
/*
{
event: VhallRTC.EVENT_REMOTESTREAM_ADD,
data:{
streamId: "", // 远端流ID
accountId: "", // 远端用户ID
}
};
*/
});
远端流删除事件
vhallrtc.on(VhallRTC.EVENT_REMOTESTREAM_REMOVED, function(event) {
console.log(event);
/*
{
event: VhallRTC.EVENT_REMOTESTREAM_REMOVED,
data:{
streamId: "", // 远端流ID
accountId: "", // 远端用户ID
}
};
*/
});
远端流音视频状态改变事件
vhallrtc.on(VhallRTC.EVENT_REMOTESTREAM_MUTE, function(event) {
console.log(event);
/*
{
event: VhallRTC.EVENT_REMOTESTREAM_MUTE,
data:{
streamId: "" // 远端流ID
}
};
*/
});
实例接口使用
获取音视频设备列表
// 预留参数
var opt = {};
// 成功回调
var success = function (devices) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
// 获取音视频设备列表
vhallrtc.getDevices(opt, success, failure);
获取视频设备支持分辨率列表
// 参数
var opt = {
deviceId: "设备ID"
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
// 获取视频设备支持分辨率列表
vhallrtc.getVideoConstraints(opt, success, failure);
- 由于浏览器原因,获取时请确保相关视频设备未启用。如已启用可能会导致获取结果异常。
创建本地音视频流
// 配置流参数
var opt = {
videoNode: "div", // 传入本地视频显示容器,必填
audio: true, // 是否获取音频,选填,默认为true
video: true, // 是否获取视频,选填,默认为true
speaker:true, // 桌面共享是否分享音频(chrome浏览器弹框左下角显示“分享音频”选框),选填,默认为true
showControls:true, // 是否开启视频原生控制条,选填,默认为true
profile: VhallRTC.VIDEO_PROFILE_480P_0, // 自定义分辨率,使用分辨率模板,选填,与videoQuality参数互斥,优先使用profile参数,推荐使用。
videoQuality: { width: 640, height: 480, bitrate: 720 , framerate:15 }, // 自定义分辨率、码率、帧率(5~30),选填 不使用profile模板时可选填,初学者不推荐使用。
mute: {audio: false, video: false}, // 是否静音,关视频,选填,默认为false
videoDevice: "deviceId", // 视频设备id,选填 默认为系统缺省
audioDevice: "deviceId", // 音频设备id,选填 默认为系统缺省
videoCodec: VhallRTC.CODECS_VP8 // 视频编码,选填 默认为VP8
};
// 成功回调
var success = function(event){
var streamId = event.streamId; // 获取流Id
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 创建本地流
vhallrtc.createStream(opt , success , failure);
- 传入profile参数时,默认按照profile的参数创建本地流。
- 传入videoDevice 与 audioDevice 时,会按照指定设备创建本地流。
- 桌面共享时的speaker(采集扬声器)参数与audio(采集麦克风)参数互斥,优先speaker(采集扬声器)。
- 如果需要与互动小程序互通,编码参数(videoCodec)必须指定为H.264
销毁本地音视频流
// 参数
var opt = {
streamId:"" // 本地流ID
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 销毁本地流
vhallrtc.destroyStream(opt, success , failure);
推送本地流
// 参数
var opt = {
streamId: "" // 本地流ID
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 推送本地流
vhallrtc.publish(opt, success, failure);
- streamId参数为创建本地流时返回的流ID
停止推送本地流
// 参数
var opt = {
streamId: "" // 本地流ID
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 停止推送本地流
vhallrtc.unpublish(opt, success, failure);
订阅播放远端流
// 监听远端流添加事件
vhallrtc.on(VhallRTC.EVENT_REMOTESTREAM_ADD, function(event) {
// 传入参数
var opt = {
streamId:event.data.streamId, // 远端流ID,必填
videoNode:'remoteVideoDiv', // 远端流显示容器, 必填
mute:{
audio:false, // 是否静音 选填 默认 false
video:false // 是否关闭视频 选填 默认 false
},
dual:1 // 双流订阅选项, 0 为小流 , 1 为大流 选填。 默认为 1
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 订阅播放远端流
vhallrtc.subscribe(opt, success, failure);
});
- 该方法需要在监听到远端流添加后调用
- 每个远端流都需要单独的显示容器
- 双流是为了减少不必要的带宽和系统资源占用,当页面小屏幕显示时,推荐订阅小流,此选项可通过接口动态切换
取消订阅远端流
// 传入参数
var opt = {
streamId:event.data.streamId // 远端流ID , 必填
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 取消订阅
vhallrtc.unsubscribe(opt, success, failure);
停止播放音视频流
// 参数
var opt = {
streamId:"" // 流ID
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 停止播放音视频流
vhallrtc.stopStream(opt, success , failure);
播放音视频流
// 参数
var opt = {
videoNode:'videoDiv',
streamId:"" // 流ID
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 播放音视频流
vhallrtc.playStream(opt, success , failure);
- 注意:本地流和远端流创建后默认自动播放,无需调用此接口.
获取房间信息
var info = vhallrtc.getRoomInfo();
/*
{
local: {
users: [
{
accountId,
streams: [{ streamId, type, state }, { streamId, type, state }...] // 流Id,流类型,状态
} // state 0 未订阅 1 已订阅
]
},
remote: {
users: [
{
accountId,
streams: [{ streamId, type, state }, { streamId, type, state }...]
} // state 0 未订阅 1 已订阅
]
}
}
*/
开关音视频
// 传入参数
var opt = {
streamId:"", // 本地或远端流Id,必填
mute:{
audio:false, // 是否关音频,选填。 不填则不改变当前流音频状态
video:false, // 是否关视频,选填。 不填则不改变当前流视频状态
}
};
// 成功回调
var success = function(res){
}
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 开关音视频
vhallrtc.mute(opt, success, failure);
远端流双流配置
// 传入参数
var opt = {
streamId:"", // 远端流Id,必填
dual:1 // 双流订阅选项, 0 为小流, 1为大流 必填。
};
// 成功回调
var success = function(res){
}
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 远端流双流配置
vhallrtc.setDual(opt, success, failure);
开启旁路直播推流
// 传入参数
var opt = {
layout: VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_1, // 旁路布局,选填 默认一人平铺类型
profile:VhallRTC.BROADCAST_VIDEO_PROFILE_1080P_1,
border:{ // 旁路边框 选填。
width:4, // 边框大小 值为 [2、 4 、 6 、8] 其中一个
color:"0xffffff" // 边框颜色
}
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 开启推送旁路直播流
vhallrtc.startBroadCast(opt, success, failure);
停止旁路直播流
// 传入参数
var opt = {
roomId:"" // 直播房间ID,必填
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 停止推送旁路直播流
vhallrtc.stopBroadCast(opt, success, failure);
动态配置旁路布局
// 传入参数
var opt = {
layout: VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_1, // 旁路布局,选填 不填默认不改变原配置
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 配置旁路布局
vhallrtc.setBroadCastLayout(opt, success, failure);
- 此接口必须在旁路直播推流成功后调用
动态配置旁路主屏
// 传入参数
var opt = {
mainScreenStreamId: "" // 旁路流中主屏显示流ID,选填 不填默认不改变原配置
};
// 成功回调
var success = function(res){
};
// 失败回调
var failure = function(event){
console.log(event); // object 类型, { code:错误码, message:"", data:{} }
};
// 动态配置旁路主屏
vhallrtc.setBroadCastScreen(opt, success, failure);
- 此接口必须在旁路直播推流成功后调用
申请上麦
// 预留参数
var opt = {};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.apply(opt, success, failure);
同意申请上麦
vhallrtc.on(VhallRTC.EVENT_ROOM_APPLY, event => {
// 传入参数
var opt = {
userId: event.data.userId; // 用户ID
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.consentApply(opt, success, failure);
});
- userId 需要通过监听到申请上麦后获得
- 该方法只有主持端才能调用
拒绝申请上麦
vhallrtc.on(VhallRTC.EVENT_ROOM_APPLY, event => {
// 传入参数
var opt = {
userId: event.data.userId; // 用户ID
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.rejectApply(opt, success, failure);
});
- userId 需要通过监听到申请上麦后获得
- 该方法只有主持端才能调用
邀请上麦
// 传入参数
var opt = {
userId: ""; // 用户ID
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.invite(opt, success, failure); // 主持端才能调用
- 该方法只有主持端才能调用
同意被邀上麦
// 预留参数
var opt = {};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.consentInvite(opt, success, failure);
拒绝被邀上麦
// 预留参数
var opt = {};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.rejectInvite(opt, success, failure);
获取黑名单列表
// 预留参数
var opt = {};
// 成功回调
var success = function (res) {
console.log(res); // array 类型 ["222"]
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.getBlackList(opt , success, failure);
- 该方法只有主持端才能调用
加入黑名单列表
// 传入参数
var opt = {
userId: ""; // 用户ID
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.addBlackList(opt, success, failure);
- 该方法只有主持端才能调用
从黑名单列表中移除
// 传入参数
var opt = {
userId: ""; // 用户ID
};
// 成功回调
var success = function (res) {
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.removeBlackList(opt, success, failure);
- 该方法只有主持端才能调用
获取上下行丢包率
// 预留参数
var opt = {};
// 成功回调
var success = function (event) {
/*
{
upLossRate, // 上行丢包率
downLossRate // 下行丢包率
}
*/
console.log(event);
};
// 失败回调
var failure = function (event) {
console.log(event); // object 类型,{ code: 错误码, message: "", data: {} }
};
vhallrtc.getPacketLossRate(opt, success, failure);
获取房间在线列表
// 预留参数
var opt = {};
// 成功回调
var success = function(res){
console.log(res); // object 类型 , {lists:[{status:推流状态 , third_party_user_id:用户ID}]}
}
// 失败回调
var failure = function(error){
console.log(error); // object 类型 , {code:错误码,msg:"",data:{}}
}
vhallrtc.getUserList(opt,success,failure);
获取流的mute状态
// 传入参数
var opt = {
streamId:""
}
// 成功回调
var success = function(res){
console.log(res); // object 类型 , {audioMuted:音频mute状态,videoMuted:视频mute状态}
}
一对一通讯
一对一呼叫视频
// 传入参数
var params = {
userId:"", // 要发起一对一的用户
remoteNode:"", // 订阅的视频显示容器
localStreamOpt:{
videoNode: "div", // 传入本地视频显示容器,必填
audio: true, // 是否获取音频,选填,默认为true
video: true, // 是否获取视频,选填,默认为true
profile: VhallRTC.VIDEO_PROFILE_180P_1, // 自定义分辨率,使用分辨率模板,选填,与videoQuality参数互斥,优先使用profile参数,推荐使用。
videoQuality: { width: 320, height: 180, bitrate: 200 ,framerate:5}, // 自定义分辨率、码率、帧率(5-30),选填 不使用profile模板时可选填,初学者不推荐使用。
mute: {audio: false, video: false}, // 是否静音,关视频,选填,默认为false
videoDevice: "deviceId", // 视频设备id,选填 默认为系统缺省
audioDevice: "deviceId", // 视频设备id,选填 默认为系统缺省
attributes: "", // 自定义参数,选填 字符串类型 不大于256字符
}
}
// 成功回调
var success = function(){}
// 失败回调
var failure = function(error){
console.log(error); // object 类型,{ code: 错误码, message: "", data: {} }
}
vhallrtc.OTOCall(opt,success,failure);
一对一应答视频
// 传入参数
var params = {
isConsent:true, // 是否同意视频通话 , false时则不用传入remoteNode 及 localStreamOpt 参数
userId:"", // 拒绝通话的指定用户名ID , 通过监听邀请事件获取
remoteNode:"", // 订阅的视频显示容器
localStreamOpt:{
videoNode: "div", // 传入本地视频显示容器,必填
audio: true, // 是否获取音频,选填,默认为true
video: true, // 是否获取视频,选填,默认为true
profile: VhallRTC.VIDEO_PROFILE_180P_1, // 自定义分辨率,使用分辨率模板,选填,与videoQuality参数互斥,优先使用profile参数,推荐使用。
videoQuality: { width: 320, height: 180, bitrate: 200 ,framerate:5}, // 自定义分辨率、码率、帧率(5-30),选填 不使用profile模板时可选填,初学者不推荐使用。
mute: {audio: false, video: false}, // 是否静音,关视频,选填,默认为false
videoDevice: "deviceId", // 视频设备id,选填 默认为系统缺省
audioDevice: "deviceId", // 视频设备id,选填 默认为系统缺省
attributes: "", // 自定义参数,选填 字符串类型 不大于256字符
}
}
// 成功回调
var success = function(){}
// 失败回调
var failure = function(error){
console.log(error); // object 类型,{ code: 错误码, message: "", data: {} }
}
vhallrtc.OTOAnwser(opt, success, failure);
-
此接口需要监听VhallRTC.EVENT_ROOM_INVITED 事件调用。
一对一挂断视频
// 成功回调
var success = function(){};
// 失败回调
var failure = function(error){
console.log(error); // object 类型,{ code: 错误码, message: "", data: {} }
}
vhallrtc.OTOHangUp(success , failure);
全局定义
互动角色参考表(role参数)
| 可选值 | 角色 | 备注 |
|---|---|---|
| VhallRTC.MASTER | 主持人 | 拥有全部接口使用权限 |
| VhallRTC.GUEST | 嘉宾、观众 | 仅拥有部分接口使用权限 |
-
2.1.7以上版本去除角色概念
互动流分辨率参考表(profile参数)
| 可选值 | 宽高比 | 分辨率(宽x高) | 码率 (kbps) | 备注 |
|---|---|---|---|---|
| VhallRTC.VIDEO_PROFILE_120P_0 | 4:3 | 160x120 | 120~200 | |
| VhallRTC.VIDEO_PROFILE_120P_1 | 16:9 | 160x90 | 100~180 | |
| VhallRTC.VIDEO_PROFILE_180P_0 | 4:3 | 240x180 | 180~290 | |
| VhallRTC.VIDEO_PROFILE_180P_1 | 16:9 | 320X180 | 180~290 | |
| VhallRTC.VIDEO_PROFILE_240P_0 | 4:3 | 320x240 | 180~300 | |
| VhallRTC.VIDEO_PROFILE_240P_1 | 16:9[1] | 424X240 | 190~350 | |
| VhallRTC.VIDEO_PROFILE_360P_0 | 4:3 | 480X360 | 190~400 | |
| VhallRTC.VIDEO_PROFILE_360P_1 | 16:9 | 640x360 | 200~480 | |
| VhallRTC.VIDEO_PROFILE_480P_0 | 4:3 | 640x480 | 215~720 | |
| VhallRTC.VIDEO_PROFILE_480P_1 | 16:9[1] | 848x480 | 240~950 | |
| VhallRTC.VIDEO_PROFILE_720P_0 | 4:3 | 960x720 | 250~1100 | |
| VhallRTC.VIDEO_PROFILE_720P_1 | 16:9 | 1280x720 | 275~1250 | |
| VhallRTC.VIDEO_PROFILE_1080P_0 | 4:3 | 1440x1080 | 350~1500 | |
| VhallRTC.VIDEO_PROFILE_1080P_1 | 16:9 | 1920x1080 | 400~1800 | |
| VhallRTC.VIDEO_PROFILE_720P_DESKTOP | 16:9 | 1280x720 | 此定义仅针对桌面采集模式 | |
| VhallRTC.VIDEO_PROFILE_1080P_DESKTOP | 16:9 | 1920x1080 | 此定义仅针对桌面采集模式 |
- 此参数为互动发起使用,注意与旁路区分。
互动旁路直播流分辨率参考表
| 可选值 | 宽高比 | 分辨率(宽x高) | 码率 (kbps) |
|---|---|---|---|
| VhallRTC.BROADCAST_VIDEO_PROFILE_720P_1 | 16:9 | 1280X720 | 1100 |
| VhallRTC.BROADCAST_VIDEO_PROFILE_1080P_1 | 16:9 | 1920X1080 | 1600 |
- 此参数为旁路直播使用,注意与互动区分
互动视频编码参数(videoCodec参数)
| 可选值 | 编码方式 | 备注 |
|---|---|---|
| VhallRTC.CODECS_VP8 | VP8 | 默认值 |
| VhallRTC.CODECS_H264 | H.264 | 与小程序互动必选 |
互动旁路布局参考表(layout参数)
均匀布局表格
| 可选值 | 说明 | 图示(4:3画布) | 图示(16:9画布) |
|---|---|---|---|
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_1 | 一人铺满 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_2_H | 左右两格 | ![]() ![]() |
![]() ![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_3_E | 正品字 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_3_D | 倒品字 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_4_M | 2行x2列 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_5_D | 2行,上2下3 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_6_E | 2行x3列 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_GRID_9_E | 3行x3列 | ![]() |
![]() |
主次屏浮窗布局
| 可选值 | 说明 | 图示(4:3画布) | 图示(16:9画布) |
|---|---|---|---|
| VhallRTC.CANVAS_LAYOUT_PATTERN_FLOAT_2_1DR | 大屏铺满,小屏悬浮右下角 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_FLOAT_2_1DL | 大屏铺满,小屏悬浮左下角 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_FLOAT_3_2DL | 大屏铺满,2小屏悬浮左下角 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_FLOAT_6_5D | 大屏铺满,一行5个悬浮于下面 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_FLOAT_6_5T | 大屏铺满,一行5个悬浮于上面 | ![]() |
![]() |
主次屏平铺布局
| 可选值 | 说明 | 图示(4:3画布) | 图示(16:9画布) |
|---|---|---|---|
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_5_1T4D | 主次平铺,一行4个位于底部 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_5_1D4T | 主次平铺,一行4个位于顶部 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_5_1L4R | 主次平铺,一列4个位于右边 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_5_1R4L | 主次平铺,一列4个位于左边 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_6_1T5D | 主次平铺,一行5个位于底部 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_6_1D5T | 主次平铺,一行5个位于顶部 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_9_1L8R | 主次平铺,右边为(2列x4行=8个块) | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_9_1R8L | 主次平铺,左边为(2列x4行=8个块) | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_13_1L12R | 主次平铺,右边为(3列x4行=12个块) | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_13_1L12R | 主次平铺,右边为(3列x4行=12个块) | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_17_1TL16GRID | 主次平铺,1V16,主屏在左上角 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_9_1D8T | 主次平铺,主屏在下,8个(2行x4列)在上 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_13_1TL12GRID | 主次平铺,主屏在左上角,其余12个均铺于其他剩余区域 | ![]() |
![]() |
| VhallRTC.CANVAS_LAYOUT_PATTERN_TILED_17_1TL16GRID_E | 主次平铺,主屏在左上角,其余16个均铺于其他剩余区域 | ![]() |
![]() |
- 便于理解,如 CANVAS_LAYOUT_PATTERN_TILED_5_1R4L,其中“5”表示共5块,H表示horizontal,E表示erected, M表示matts, T/D表示top/down,L/R表示left/right
- 当房间内只有一路视频时,无论设置哪一种预置定义模板,混流结果均是该路视频等比铺满画布
互动事件参考表(监听实例事件)
| 可选值 | 事件 | 备注 |
|---|---|---|
| VhallRTC.EVENT_ROOM_ERROR | 房间连接出错事件 | 房间连接出错之后触发 *(2.1.7以上版本已废弃) |
| VhallRTC.EVENT_ROOM_CLOSE | 房间关闭事件 | 房间关闭后触发 |
| VhallRTC.EVENT_ROOM_AUTH | 审核上麦事件 | 观众端申请上麦,主持端审核后触发 |
| VhallRTC.EVENT_ROOM_BLACKLIST | 添加用户进黑名单事件 | 主持端给观众加入黑名单时触发 |
| VhallRTC.EVENT_ROOM_INVITED | 被邀请上麦事件 | 主持端邀请上麦后触发 |
| VhallRTC.EVENT_ROOM_APPLY | 申请上麦事件 | 观众端申请上麦后触发 |
| VhallRTC.EVENT_ROOM_CALLBACK | 邀请上麦回复事件 | 主持端邀请上麦,观众端接受或拒绝后触发 |
| VhallRTC.EVENT_ROOM_JOIN | 用户加入房间事件 | 用户初始化后触发 |
| VhallRTC.EVENT_ROOM_LEAVE | 用户离开房间事件 | 用户离开时触发 |
| VhallRTC.EVENT_ROOM_DISCONNECTED | 房间断开事件 | 手动调用销毁实例时触发 |
| VhallRTC.EVENT_ROOM_EXCDISCONNECTED | 房间异常断开事件 | 异常断开。 如:网络断开时触发 |
| VhallRTC.EVENT_REMOTESTREAM_FAILED | 推拉流异常事件 | 推拉流异常时触发 |
| VhallRTC.EVENT_REMOTESTREAM_ADD | 远端流添加事件 | 当房间内有推流时触发 |
| VhallRTC.EVENT_REMOTESTREAM_REMOVED | 远端流删除事件 | 当房间内有取消推流时触发 |
| VhallRTC.EVENT_REMOTESTREAM_MUTE | 远端流音视频状态改变事件 | 改变音视频状态后触发 |
| VhallRTC.EVENT_STREAM_END | 本地流断开事件 | 本地流被断开时触发。 如:设备被拔掉 |
创建本地流失败信息表
| 错误名(name) | 错误说明 | 错误信息(message) | 信息说明 | 备注 | |
|---|---|---|---|---|---|
| NotFoundError | 设备未找到 | 系统找不到用户选定的设备 | |||
| NotReadableError | 读取设备失败 | Could not start video source Could not start audio source |
无法读取摄像头数据 无法读取麦克风数据 |
可能视频设备被占用,或者视频设备损坏 可能麦克风被占用,或者麦克风损坏 |
|
| OverconstrainedError | 执行约束参数失败 | 设备不支持传入的参数,多见于设备不支持的分辨率 如确认设备支持此分辨率依然报错,请检查是否正在获取被占用的摄像设备(获取设备时,设备已经被启用,或者未关闭完成) |
|||
| NotAllowedError | 设备访问未得到用户许可 | Permission denied | 用户未许可访问设备 | ||
| TypeError | 接口参数错误 | Failed to execute 'getUserMedia' on 'MediaDevices': At least one of audio and video must be requested | 用户调用接口audio参数或video参数两者必须传入一个 | 此问题一般由底层开发者触发,需要开发者校验接口传入参数 | |
| AbortError | 设备无法使用 | 其它问题导致的设备无法使用 |
























































