- 类名 VhallInteraction
- 方法
- 1.初始化
- 2.上麦
- 3.下麦
- 4.设置视频参数
- 5.获取推流可选视频分辨率
- 6.获取可选帧率
- 7.获取当前视频设置参数
- 8.获取音视频设备列表
- 9.设置大屏显示
- 10.获取用户当前是否在大屏显示
- 11.获取显示大屏的用户id
- 12.监听用户进入房间事件
- 13.监听用户离开房间事件
- 14.进入房间
- 15.退出房间
- 16.获取流ID
- 17.获取当前用户id
- 18.获取音频状态(是否静音)
- 19.获取视频是否关闭(是否黑场)
- 20. 关闭/打开音频(有音频数据,内容全零)
- 21. 关闭/开启视频(关闭后为黑场)
- 22.申请上麦事件
- 23.同意申请上麦
- 24.拒绝申请上麦
- 25.邀请上麦
- 26.获取当前互动房间用户列表
- 27.将指定用户踢出房间
- 28.取消踢出指定用户
- 29.获取被踢用户列表
- 30.获取旁路布局layout类型
- 31.开启旁路直播推流
- 32.停止旁路推流
- 33.用户上麦事件
- 34.用户下麦事件
- 35.摄像头预览
- 36.销毁互动实例
- 37.获取上下行丢包率
- 38.获取视频设备支持分辨率
- 39.获取旁路布局的可选分辨率
- 40.关闭远程视频
- 41.打开远程视频
- 错误码对照表
类名 VhallInteraction
说明:互动直播(主持端)。
方法
1.初始化
new VhallInteraction 互动对象初始化
//简单调用
var interaction = new VhallInteraction({
inavId:"", //互动房间id,必填
videoNode:"my-interaction", //互动直播显示容器,必填
//成功回调,非必填
success: function(result){
//TODO
},
//失败回调,非必填
fail: function(reason){
//TODO
},
//混流事件回调,服务端混流后触发此事件,开启旁路直播方法需写在此事件里
mixed: function(){
//开启旁路直播
window.interaction.startBroadCast({
roomId:'',
success:function(){
console.info('开启旁路成功');
},
fail:function(reason){
console.info(reason.msg)
}
});
}
});
参数说明:
参数名称 | 参数说明 | 是否必填 |
---|---|---|
inavId | 互动房间id | 是 |
videoNode | 互动直播显示容器 | 是 |
success | 初始化成功回调 | 否 |
fail | 初始化失败回调 | 否 |
所有参数均使用的调用示例
//所有参数均使用的调用示例
window.interaction = new VhallInteraction({
//互动房间Id
inavId: 'xxx',
//互动容器,可如上简单调用,传入一个容器id,也支持自定义,如下传入对象,分别设置local和remote的容器,自定义模式下,需将template的值设为custom
videoNode:{
//本地视频容器
local:'my-local-video',
//远程视频容器
remote:'my-remote-video',
//远程视频容器需要嵌入式的element节点
remoteAfterElement:'<div class="action-box"></div>',
//本地视频容器需要嵌入式的element节点
localAfterElement:'<div class="action-box"></div>',
},
//模版,如需要自定义videoNode,需传值为custom。
template:'custom',
//本地视频宽度像素值,(如160px或100%)
localVideoWidth:'320px',
//本地视频高度像素值,(如90px或100%)
localVideoHeight:'180px',
//远程视频宽度像素值,示例同上
remoteVideoWidth:'160px',
//远程视频高度像素值,示例同上
remoteVideoHeight:'90px',
//推流配置
conf:{
//推流视频分辨率,Array类型,四个值,第1、3个值为分辨率的宽,2、4 个值为视频的高
videoSize: [320,180,320,180],
//推流视频分辨率。此参数会自动设置该分辨率对应的码率,设置后videoSize变为无效,可设值见下面对照表
resolution:'VIDEO_QUALITY_HIGH',
//参数宏定义,传参后,自动设置对应参数:videoSize、resolution、bitrate、framerate,同时自定义的这三个参数失效,可设值见下面对照表
profile:'VIDEO_PROFILE_120P_1',
},
//是否自动上麦推流,如果设置为true,实例化成功后自动上麦推流。
autoPublish:false,
/*
打开视频用户名单,非必填,默认都打开。
只对远程视频用户有效,设置后,只有名单中的视频会打开,其它均都被关闭。
如想再开启或关闭,可调用muteRemoteVideo方法。
与muteVideoUsers参数互斥,同时使用时,unmuteVideoUsers生效
*/
unmuteVideoUsers:['guest1','guest2','guest3'],
/*
关闭视频用户名单,非必填,默认都打开。
只对远程视频用户有效,设置后,被设置的用户可以上麦,但上麦后不会显示视频。
如想再开启或关闭,可调用muteRemoteVideo方法。
与muteVideoUsers参数互斥,同时使用时,unmuteVideoUsers生效
*/
muteVideoUsers:['guest4','guest5','guest6'],
//实例化成功回调
success: function(){
},
//实例化失败回调
fail: function(reason){
alert(reason);
},
//本地视频流加载完成事件
localLoaded: function(){
},
//远程视频加载完成事件
remoteLoaded: function(){
}
});
互动初始化conf.resolution参数对应的分辨率和码率对照表
可选值 | 对应分辨率 | 对应码率 |
---|---|---|
VIDEO_QUALITY_NORMAL | 320x240 | 250 |
VIDEO_QUALITY_LOW | 160x120 | 150 |
VIDEO_QUALITY_MEDIUM | 320x240 | 250 |
VIDEO_QUALITY_HIGH | 480x360 | 300 |
VIDEO_QUALITY_360P | 640x360 | 375 |
VIDEO_QUALITY_480P | 640x480 | 500 |
VIDEO_QUALITY_540P | 960x540 | 750 |
VIDEO_QUALITY_720P | 960x720 | 900 |
VIDEO_QUALITY_720P_0 | 960x720 | 900 |
VIDEO_QUALITY_720P_1 | 1280x720 | 1000 |
VIDEO_QUALITY_SCREEN | 1080(适用桌面推流) | 1500 |
conf.profile参数对应的分辨率和码率对照表
可选值 | 对应分辨率 | 对应码率 | 对应帧率 |
---|---|---|---|
VIDEO_PROFILE_120P_0 | [160, 120, 160, 120] | [150, 200] | [0, 30] |
VIDEO_PROFILE_120P_1 | [160, 90, 160, 90] | [100, 160] | [0, 30] |
VIDEO_PROFILE_180P_0 | [160, 120, 240, 180] | [225, 280] | [0, 30] |
VIDEO_PROFILE_180P_1 | [160, 90, 320, 180] | [225, 280] | [0, 30] |
VIDEO_PROFILE_240P_0 | [160, 120, 320, 240] | [250, 280] | [0, 30] |
VIDEO_PROFILE_240P_1 | [160, 120, 424, 240] | [250, 320] | [0, 30] |
VIDEO_PROFILE_360P_0 | [240, 180, 480, 360] | [300, 360] | [0, 30] |
VIDEO_PROFILE_360P_1 | [320, 180, 640, 360] | [375, 440] | [0, 30] |
VIDEO_PROFILE_480P_0 | [640, 480, 640, 480] | [500, 640] | [0, 30] |
VIDEO_PROFILE_480P_1 | [848, 480, 848, 480] | [750, 860] | [0, 30] |
VIDEO_PROFILE_720P_0 | [960, 720, 960, 720] | [900, 1000] | [0, 30] |
VIDEO_PROFILE_720P_1 | [1280, 720, 1280, 720] | [1000, 1100] | [0, 30] |
VIDEO_PROFILE_720P_DESKTOP | [1280, 720, 1280, 720] | [600, 800] | [0, 15] |
VIDEO_PROFILE_1080P_0 | [1440, 1080, 1440, 1080] | [1200, 1300] | [0, 30] |
VIDEO_PROFILE_1080P_1 | [1920, 1080, 1920, 1080] | [1500, 1600] | [0, 30] |
VIDEO_PROFILE_1080P_DESKTOP | [1920, 1080, 1920, 1080] | [1150, 1350] | [0, 15] |
2.上麦
interaction.publish
/**
* 上麦
*/
interaction.publish({
success:function(){
},
fail:function(reason){
}
});
3.下麦
interaction.unpublish
/**
* 下麦
*/
interaction.unpublish({
success:function(){
},
fail:function(reason){
}
});
4.设置视频参数
interaction.changeSetting
//获取当前视频设置参数
var conf = window.interaction.getSetting();
//设置之后的摄像头ID
var v = '摄像头ID';
//设置之后的麦克风ID
var a = '麦克风ID';
//conf参数video的值
conf.video = v ? { deviceId: v } : false;
//conf参数audio的值
conf.audio = a ? { deviceId: a } : false;
//视频分辨率
conf.resolution = 'VIDEO_QUALITY_480P'; // 桌面共享为:VIDEO_QUALITY_SCREEN
//调用changeSetting方法,将设置好的conf参数传入
window.interaction.changeSetting({
conf:conf
});
conf中的参数缺省都为默认值
5.获取推流可选视频分辨率
interaction.getVideoSize
/**
* 获取推流可选视频分辨率
* @return {array} 可选分辨率数组,示例:[{'size':[240, 180, 240, 180],discription:'240*180'}];其中:size 为可选分辨率,discription为描述信息。
*/
interaction.getVideoSize();
6.获取可选帧率
interaction.getVideoFrameRate
/**
* 获取可选帧率
* @return {array} 可选帧率,示例:[{'rate':[5,8],discription:'Low'},{'rate':[10,15],discription:'Noraml'}];其中,rate为帧率,discription为描述。
*/
interaction.getVideoFrameRate();
7.获取当前视频设置参数
interaction.getSetting
/**
* 获取当前视频设置参数
* @return {object} 当前视频设置
* @retrun.audio 音频设置, true 为使用默认音频设备,{deviceId:''}中的deviceId为设备Id
* @retrun.video 视频设置, true 为使用默认视频设备,{deviceId:''}中的deviceId为设备Id
* @return.data,数据,true为使用数据,false为不使用数据
* @return.videoSize 视频分辨率
* @return.videoFrameRate 视频帧率
*/
interaction.getSetting()
8.获取音视频设备列表
interaction.getDevices
/**
* 获取音视频设备列表
* @return {object} 音视频设备列表,示例数据:{cameras:[{deviceId:'',label:''},{deviceId:'',label:''}],mics:[{deviceId:'',label:''},{deviceId:'',label:''}]}
*/
interaction.getDevices(function(devices){
console.log(devices);
},function(reason){});
9.设置大屏显示
interaction.setBigShow
/**
* 设置大屏
* @param {string} userId 用户Id,必填
* @return {string} 返回提示,success为成功,其他为失败原因。
*/
interaction.setBigShow(userId);
10.获取用户当前是否在大屏显示
interaction.isBigShow
/**
* 获取用户当前是否在大屏显
* @param {string} userId 用户Id,必填
* @return {Boolean} true为是,false为否 是否处在大屏显示中
*/
interaction.isBigShow(userId)
11.获取显示大屏的用户id
interaction.getBigShow
/**
* 获取显示大屏的用户id
* @return {string} 显示大屏的用户id
*/
interaction.getBigShow()
12.监听用户进入房间事件
interaction.onEnter
/**
* 监听用户进入房间事件
@param {Function} 事件回调函数,返回userId
*/
interaction.onEnter(function(userId){
//TODO
});
13.监听用户离开房间事件
/**
* 监听用户离开房间事件
@param {Function} 事件回调函数,返回userId
*/
interaction.onQuit(function(userId){
//TODO
});
14.进入房间
interaction.enter
/**
* 进入房间,简单调用
*/
interaction.enter();
/**
* 进入房间,带回调方式调用
*/
interaction.enter(function(){
//成功回调
},function(reason){
//失败回调,reason为失败原因。
});
注意:1.此方法使与离开房间接口(interaction.exit)配合使用,在使用了exit接口退出房间后,再此进入房间,才需要调用此方法。2.实例化互动对象时,会自动进入房间,不需调用此方法。
15.退出房间
interaction.exit
/**
* 退出房间
*/
interaction.exit();
/**
* 退出房间,带回调方式调用
*/
interaction.exit(function(){
//成功回调
},function(reason){
//失败回调,reason为失败原因。
});
16.获取流ID
interaction.getStreamId
//获取流ID
interaction.getStreamId();
17.获取当前用户id
interaction.getUserId
//获取当前用户id
interaction.getUserId();
18.获取音频状态(是否静音)
interaction.isAudioMuted
/**
* 获取音频状态(是否静音)
* @return {Bealon} true/false
*/
interaction.isAudioMuted();
19.获取视频是否关闭(是否黑场)
interaction.isVideoMuted
/**
* 获取视频是否关闭(是否黑场)
* @return {Bealon} true/false
*/
interaction.isVideoMuted();
20. 关闭/打开音频(有音频数据,内容全零)
interaction.muteAudio
/**
* 关闭/打开音频(有音频数据,内容全零)
* @param {Bealon} true/false,如果参数为空,则改变当前状态。
*/
interaction.muteAudio(isMuted);
此方法在上麦成功之后调用才会生效
21. 关闭/开启视频(关闭后为黑场)
interaction.muteVideo
/**
* 关闭/开启视频(关闭后为黑场)
* @param {Bealon} true/false,如果参数为空,则改变当前状态。
*/
interaction.muteVideo(isMuted);
此方法在上麦成功之后调用才会生效
22.申请上麦事件
interaction.onApply
//监听用户申请上麦事件,处理方式一, 直接上麦
interaction.onApply(function(event){
event.consent();
});
/**
* 监听用户申请上麦事件,处理方式二,调对话框提示,把选择权给用户
* @param {object} event 回调事件参数,包含一个属性userId,和两个方法:consent 、 reject
*/
interaction.onApply(function(event){
if(confirm('用户:' + event.userId + '申请上麦,同意吗?')){
//如果同意,调用此方法
event.consent();
}else{
//如果拒绝,调用此方法
event.reject();
}
});
/**
* 监听用户申请上麦事件,处理方式三,调对话框,把选择权给用户,并且监听同意&拒绝之后的回调事件
* @param {object} event 回调事件参数,包含一个属性userId,和两个方法:consent 、 reject
*/
interaction.onApply(function(event){
if(confirm('用户:' + event.userId + '申请上麦,同意吗?')){
//同意申请,带参数调用方法
event.consent({
//同意申请后成功回调
success:function(){
//TODO
},
////同意申请后失败回调
fail:function(reason){
//TODO
}
});
}else{
//拒绝申请,带参数调用方法
event.reject({
//拒绝申请后成功回调
success:function(){
//TODO
},
////拒绝申请后失败回调
fail:function(reason){
//TODO
}
});
}
});
23.同意申请上麦
interaction.consentApply
//简单调用
interaction.consentApply('用户Id');
//带参数调用
/**
* 同意申请上麦
* @params {object} userId 用户ID
* @params {object} success 成功回调
* @params {object} fail 失败回调
*/
interaction.consentApply({
userId:'',
success: function(userId){
//TODO
},
fail: function(userId){
//TODO
}
});
24.拒绝申请上麦
interaction.rejectApply
//简单调用
interaction.rejectApply('用户Id');
//带参数调用
/**
* 拒绝申请上麦
* @params {object} userId 用户ID
* @params {object} success 成功回调
* @params {object} fail 失败回调
*/
interaction.rejectApply({
userId:'',
success: function(userId){
//TODO
},
fail: function(userId){
//TODO
}
});
25.邀请上麦
interaction.invite
//简单调用
interaction.invite('用户ID');
//带参数调用
/**
* 邀请上麦
* @params {object} userId 用户ID
* @params {object} consent 同意回调
* @params {object} reject 拒绝回调
* @params {object} fail 失败回调
*/
interaction.invite({
//用户ID
userId: '',
//同意回调
consent: function(userId){
//TODO
},
//拒绝回调
reject: function(userId){
//TODO
},
//失败回调
fail: function(reason){
//TODO
}
});
26.获取当前互动房间用户列表
interaction.getUsersList
/**
* 获取当前互动房间用户列表
* @params {object} success 成功回调
* @params {object} fail 失败回调
* @params {object} update 更新回调
*/
interaction.getUsersList({
//成功回调
success: function(users){
//TODO
},
//失败回调
fail: function(reason){
//TODO
},
//更新回调
update: function(){
//TODO
}
});
27.将指定用户踢出房间
interaction.deleteUser
//简单调用
interaction.deleteUser('用户Id');
//带参数调用
/**
* 将指定用户踢出房间
* @params {object} userId 要踢出的用户ID,必填,不能为空。
* @params {object} success 成功回调
* @params {object} fail 失败回调
*/
interaction.deleteUser({
userId:'',
success: function(result){
//TODO
},
fail: function(result){
//TODO
}
});
28.取消踢出指定用户
interaction.unDeleteUser
//简单调用
interaction.unDeleteUser('用户ID');
//带参数调用
/**
* 取消踢出将指定用户
* @params {object} userId 要取消踢出的用户ID
* @params {object} success 成功回调
* @params {object} fail 失败回调
*/
interaction.unDeleteUser({
userId:'',
success: function(){
//TODO
},
fail: function(){
//TODO
}
})
29.获取被踢用户列表
interaction.getBlackList
/**
* 获取当前互动房间黑名单列表
* @params {object} success 成功回调
* @params {object} fail 失败回调
* @params {object} update 更新回调
*/
interaction.getBlackList({
//成功回调
success: function(users){
//TODO
},
//失败回调
fail: function(reason){
//TODO
},
//更新回调
update: function(){
//TODO
}
});
30.获取旁路布局layout类型
interaction.getBroadCastLayouts
/**
*@return {array} 返回可用旁路布局layout类型
*返回值示例:[{'layout':'CANVAS_LAYOUT_PATTERN_GRID_1','discription':'一人铺满'}]
*/
interaction.getBroadCastLayouts();
返回值说明:
layout类型 | 布局说明 |
---|---|
CANVAS_LAYOUT_PATTERN_GRID_1 | 一人铺满 |
CANVAS_LAYOUT_PATTERN_GRID_2_H | 左右两格 |
CANVAS_LAYOUT_PATTERN_GRID_3_E | 正品字 |
CANVAS_LAYOUT_PATTERN_GRID_3_D | 倒品字 |
CANVAS_LAYOUT_PATTERN_GRID_4_M | 2行x2列 |
CANVAS_LAYOUT_PATTERN_GRID_5_D | 2行,上3下2 |
CANVAS_LAYOUT_PATTERN_GRID_6_E | 2行x3列 |
CANVAS_LAYOUT_PATTERN_GRID_9_E | 3行x3列 |
CANVAS_LAYOUT_PATTERN_FLOAT_2_1DR | 大屏铺满,小屏悬浮右下角 |
CANVAS_LAYOUT_PATTERN_FLOAT_2_1DL | 大屏铺满,小屏悬浮左下角 |
CANVAS_LAYOUT_PATTERN_FLOAT_3_2DL | 大屏铺满,2小屏悬浮左下角 |
CANVAS_LAYOUT_PATTERN_FLOAT_6_5D | 大屏铺满,一行5个悬浮于下面 |
CANVAS_LAYOUT_PATTERN_FLOAT_6_5T | 大屏铺满,一行5个悬浮于上面 |
CANVAS_LAYOUT_PATTERN_TILED_5_1T4D | 主次平铺,一行4个位于底部 |
CANVAS_LAYOUT_PATTERN_TILED_5_1D4T | 主次平铺,一行4个位于顶部 |
CANVAS_LAYOUT_PATTERN_TILED_5_1L4R | 主次平铺,一列4个位于右边 |
CANVAS_LAYOUT_PATTERN_TILED_5_1R4L | 主次平铺,一列4个位于左边 |
CANVAS_LAYOUT_PATTERN_TILED_6_1T5D | 主次平铺,一行5个位于底部 |
CANVAS_LAYOUT_PATTERN_TILED_6_1D5T | 主次平铺,一行5个位于顶部 |
CANVAS_LAYOUT_PATTERN_TILED_9_1L8R | 主次平铺,右边为(2列x4行=8个块) |
CANVAS_LAYOUT_PATTERN_TILED_9_1R8L | 主次平铺,左边为(2列x4行=8个块) |
CANVAS_LAYOUT_PATTERN_TILED_13_1L12R | 主次平铺,右边为(3列x4行=12个块) |
CANVAS_LAYOUT_PATTERN_TILED_17_1TL12GRID | 主次平铺,1V16 |
CANVAS_LAYOUT_PATTERN_CUSTOM | 自定义,当使用坐标布局接口时 |
31.开启旁路直播推流
interaction.startBroadCast
注意:为了保证开启旁路成功,建议将此接口在初始化方法的mixed事件里调用,调用方法见 1.初始化
//简单调用
interaction.startBroadCast('直播房间ID');
//带参数调用
/**
* 开启旁路推流
* @params {string} roomId 直播房间ID,必填
* @params {string} layout 旁路布局,具体可选值,可以通过getBroadCastLayouts 接口来获取,非必填
* @params {string} resolution 旁路推流分辨率,可选值见下面参照表,非必填
* @params {string} maxScreenStream,设置屏占比最大的流ID,非必填
* @params {function} success 成功回调,非必填
* @params {function} fail 失败回调,非必填
*/
interaction.startBroadCast({
roomId:'',
layout:'',
resolution:'',
maxScreenStream:'',
success:function(result){
//TODO
},
fail: function(reason){
//TODO
}
});
resolution参数,可选值对应的分辨率、码率对照表:
可选值 | 对应分辨率 | 对应的码率 |
---|---|---|
BROADCAST_VIDEO_RESOLUTION_NORMAL | 720P | 1200 |
BROADCAST_VIDEO_RESOLUTION_480P | 480P | 800 |
BROADCAST_VIDEO_RESOLUTION_480P_1 | 480 | 800 |
BROADCAST_VIDEO_RESOLUTION_540P | 540P | 1000 |
BROADCAST_VIDEO_RESOLUTION_540P_1 | 540 | 800 |
BROADCAST_VIDEO_RESOLUTION_720P | 720P | 1200 |
BROADCAST_VIDEO_RESOLUTION_960P | 960P | 1200 |
BROADCAST_VIDEO_RESOLUTION_1080P | 1080P | 1200 |
32.停止旁路推流
interaction.stopBroadCast
//简单调用
interaction.stopBroadCast('直播房间ID');
//带参数调用
/**
* 开启旁路推流
* @params {object} roomId 直播房间ID,必填
* @params {object} success 成功回调
* @params {object} fail 失败回调
*/
interaction.stopBroadCast({
roomId:'',
success:function(result){
//TODO
},
fail: function(reason){
//TODO
}
});
33.用户上麦事件
interaction.onPublish
/**
* 用户上麦事件
@param {Function} 事件回调函数,返回userId
*/
interaction.onPublish(function(userId){
console.info('用户id为['+ userId +']的用户上麦啦!');
});
34.用户下麦事件
interaction.onUnpublish
/**
* 用户下麦事件
@param {Function} 事件回调函数,返回userId
*/
interaction.onUnpublish(function(userId){
console.info('用户id为['+ userId +']的用户下麦啦!');
});
35.摄像头预览
interaction.camerasPreview
/**
* 摄像头预览
*/
var camPre = interaction.camerasPreview({
//默认设备参数配置,缺省为默认设备
conf:{
//视频分辨率,Array类型,四个值,第1、3个值为分辨率的宽,2、4 个值为视频的高
videoSize: [320,180,320,180]
},
//回显容器,必填
videoNode:'',
//成功回调
success:function(){
},
//失败回调
fail: function(reason){
console.log(reason);
}
});
camPre.show();//显示预览
camPre.reset({
conf:{
//视频分辨率,Array类型,四个值,第1、3个值为分辨率的宽,2、4 个值为视频的高
videoSize: [320,180,320,180]
}
});//重置,设备参数配置
camPre.destroy();//销毁当前览实例对象
36.销毁互动实例
interaction.destroy
/**
* 销毁互动实例
*/
interaction.destroy();
37.获取上下行丢包率
getLossRate
/**
* 获取上下行丢包率
* @return {object} 丢包率,返回值为key 、value形式;
* 其中,upload为上行丢包率,download为下行丢包率,实例:{ upload:0,download:0 }
*/
interaction.getLossRate();
38.获取视频设备支持分辨率
getVideoConstraints
/**
* 获取视频设备支持分辨率
* @param {string} deviceId 摄像头的deviceId,通过getDevices接口获取,缺省为当前默认摄像头
* @param {number} frameRate 帧率,缺省为25
* @param {function} success 成功回调返回值如:
[{
//标签名称
label: "VIDEO_PROFILE_480P_0",
//分辨宽度
width: 640,
//分辨率高度
height: 480,
//屏幕比例
ratio: "4:3"
}]
* @param {function} fail 失败回调
*/
interaction.getVideoConstraints({
//非必填,缺省为当前默认摄像头
deviceId:'XXX',
success:function(res){
console.info(res);
},
fail:function(reason){
console.error(reason);
}
});
//调用方式二,此方法为静态方法,不依赖互动对象VhallInteraction,在未实例化互动对象之前也可用使用。
VhallInteractionTools.getVideoConstraints({
//非必填,缺省为当前默认摄像头
deviceId:'XXX',
success:function(res){
console.info(res);
},
fail:function(reason){
console.error(reason);
}
});
39.获取旁路布局的可选分辨率
getBroadCastResolutions
/**
* 获取旁路布局的可选分辨率
* @return {object} 旁路布局的可选分辨率,返回值示例:[{'resolution':'BROADCAST_VIDEO_RESOLUTION_NORMAL',description:'说明:[1280, 720],比例:16:9'}]
*/
interaction.getBroadCastResolutions();
40.关闭远程视频
muteRemoteVideo
/**
* 关闭远程视频,保留音频
* @param {array} users 用户(id),只支持数组类型
多个用户则传用户数组,如:['guest1','guest2','guest3']
* @return {array} 操作成功的用户(id),如:['guest1','guest3']
*/
interaction.muteRemoteVideo(['guest1','guest2','guest3']);
- 此方法只会关闭当前页面视频显示,不会断开链接,音频会保留。一般于多方场景下,节省资源时使用。
- 此方法只针对麦上用户有效,也就是说,被关闭视频的用户,下麦后再上麦,视频会打开。如需将某用户视频始终关闭,可以设置初始化参数muteVideoUsers
41.打开远程视频
unmuteRemoteVideo
/**
* 打开远程视频
* @param {array} users 用户(id),只支持数组类型
* 多个用户则传用户数组,如:['guest1','guest2','guest3']
* @return {array} 操作成功的用户(id),如:['guest1','guest3']
*/
interaction.unmuteRemoteVideo(['guest1','guest2','guest3']);
此方法一般与muteRemoteVideo配合使用,来动态改变用户视频显示与否,不影响音频。
错误码对照表
code | 说明 |
---|---|
611001 | 没有推流权限 |
611003 | 缺少roomId |
611005 | 你已经就在房间了 |
611007 | 已在推流中 |
611008 | 无音频/视频设备 |
611009 | 获取推流设备出错 |
611010 | 缺少用户id |
611011 | 不能踢出自己 |
611012 | 不能踢自己的流 |
611013 | 缺少videoNode参数 |
611014 | 回显容器未找到 |
611016 | 没有指定摄像头 |
611017 | videoNode参数错误 |
611018 | videoNode.local参数对应的容器找不到 |
611019 | videoNode.remote参数对应的容器找不到 |
611020 | videoNode参数错误:模版为custom时,videoNode必须指定local和remote的节点 |
611021 | videoNode参数对应的容器找不到 |
611022 | videoNode参数错误:模版为非custom时,videoNode的值必须时容器Id |
611023 | 互动房间ID不能为空! |
611024 | 需https协议才能支持! |
611025 | 访问摄像头或麦克风被拒绝 |
611028 | 权限验证失败 |
611029 | 设置旁路布局的模式失败 |
611031 | 此用户没用参与当前的互动 |
611036 | 重置摄像头时缺少参数 |
611037 | 重置摄像头时没有指定摄像头 |
611038 | 参数错误 |
611039 | 此方法不支持桌面共享 |
611040 | 获取视频设备支持分辨率出错 |
611041 | 没找到可用视频设备 |