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 设备无法使用 其它问题导致的设备无法使用