实时音视频云

  • QNRTCSession-房间管理

    最近更新时间:2018-09-13 18:38:38

    成员

    name 类型 介绍
    users User[] 房间当前的用户信息
    subscribedUsers User[] 房间当前的已经订阅的用户信息

    构造函数

    创建 QNRTC 实例

    const myRTC = new QNRTC.QNRTCSession()
    

    joinRoomWithToken 加入房间(异步)

    加入房间

    参数 类型 介绍
    roomToken string 房间 token,获取方式请阅读 Server-API 文档
    返回 类型 介绍
    users User[] 返回房间当前的 User 信息,User 详细见类型介绍
    try {
      const users = await myRTC.joinRoomWithToken(...);
    } catch(e) {
      console.log('joinRoomWithToken Error!', e);
    }
    
    // or use Promise
    myRTC.joinRoomWithToken(...).then((users) => {
      console.log('join success!');
    }).catch(e => {
      console.log('joinRoomWithToken Error!', e);
    })
    

    publish 发布视频流(异步)

    发布一个流到当前房间

    参数 类型 介绍
    stream Stream 流对象,从 deviceManager 中获取
    try {
      const stream = await QNRTC.deviceManager.getLocalStream();
      await myRTC.publish(stream);
    } catch(e) {
      console.log('publish Error!', e);
    }
    
    // or use Promise
    QNRTC.deviceManager.getLocalStream()
      .then(stream => myRTC.publish(stream))
      .then(() => {
        console.log('publish success');
      }).catch(e => {
        console.log('publish Error!', e);
      });
    

    unpublish 取消发布(异步)

    停止向房间推流,取消发布

    await myRTC.unpublish();
    
    // or use Promise
    myRTC.unpublish().then(() => console.log('un publish')).catch(console.error)
    

    subscribe 订阅用户(异步)

    订阅一名用户,获取该用户发布的流

    参数 类型 介绍
    userId string 该用户的用户 id
    返回 类型 介绍
    stream Stream 订阅的流对象,调用 play 方法来播放
    const video = document.getElementById('video');
    
    try {
      const stream = await myRTC.subscribe(userId);
      stream.play(video);
    } catch(e) {
      console.log('subscribe Error!', e);
    }
    
    // or use Promise
    myRTC.subscribe(userId).then((stream) => {
      stream.play(video);
      console.log('subscribe success!');
    }).catch(e => {
      console.log('subscribe Error!', e);
    })
    
    

    unsubscribe 取消订阅(异步)

    取消订阅一名用户

    参数 类型 介绍
    userId string 该用户的用户 id
    try {
      await myRTC.unsubscribe(userId);
    } catch(e) {
      console.log('subscribe Error!', e);
    }
    
    // or use Promise
    myRTC.unsubscribe(userId).then(() => {
      console.log('unsubscribe success!');
    }).catch(e => {
      console.log('unsubscribe Error!', e);
    })
    
    

    mute 静音/黑屏(同步)

    将发布中的视频流静音或者黑屏

    参数 类型 介绍
    muteAudio boolean 是否静音
    muteVideo boolean 是否黑屏(默认 false)
    // 黑屏
    myRTC.mute(false, true);
    
    // 静音
    myRTC.mute(true);
    

    kickoutUser 踢人(异步)

    将用户踢出房间(如果调用者没有管理权限会抛出错误)

    参数 类型 介绍
    userId string 该用户的用户 id
    try {
      await myRTC.kickoutUser(userId);
    } catch(e) {
      console.log('kickoutUser error', e);
    }
    
    // or use Promise
    myRTC.kickoutUser(userId).then(() => {}).catch(e => {
      console.log('kickoutUser error', e);
    })
    

    setDefaultMergeStream 使用默认布局开启合流 (同步)

    使用 SDK 默认的模版布局开启合流,默认布局会展示所有发布用户的流并铺满整个画布
    SDK 会默认监听房间内所有流的状态,将其排版在合流画布上
    如果您想自定义画布布局或者控制某些用户的流是否显示的话,请使用下面的手动合流接口

    关于合流的详细介绍参见 合流配置

    如果使用默认布局,请确认房间内同时只有一个用户调用

    参数 类型 介绍
    width number 合流画布的宽度(app的设定)
    height number 合流画布的高度(app的设定)
    myRTC.setDefaultMergeStream(1920, 1080); // 尺寸请对应 app 的合流设定
    

    setMergeStreamLayout 设置合流参数 (同步)

    通过调用这个接口,客户端可以设置特定用户在合流画布上的尺寸和位置
    指定的用户必须处于正在发布的状态,否则不会有任何作用。

    关于合流的详细介绍参见 合流配置

    参数 类型 介绍
    userId string 指定用户的用户 id
    option MergeOption 合流配置,具体见类型介绍
    // 当有用户发布时,设置其合流参数
    myRTC.on("user-publish", (user) => {
      myRTC.setMergeStreamLayout(user.userId, {
        x: 0, y: 0, w: 1920, h: 1080, hidden: false, muted: false,
      });
    });
    

    stopMergeStream 停止合流 (同步)

    停止当前的合流,如果需要重新开始合流,再次调用相应的 setMergeStreamLayout 即可。

    myRTC.stopMergeStream();
    

    leaveRoom 离开房间(同步)

    离开当前房间

    myRTC.leaveRoom();
    

    on / off / once / removeAllListeners 事件操作

    通过 QNRTCSession 实例可以给各种事件挂钩子,具体的事件实现参考 EventEmitter
    具体的事件列表参考下文

    // 监听事件
    myRTC.on('user-join', handleUserJoin);
    
    // 只监听一次
    myRTC.once('user-join', handleUserJoin);
    
    // 取消监听
    myRTC.off('user-join', handleUserJoin);
    
    // 取消所有监听
    myRTC.removeAllListeners('user-join');
    
    
    以上内容是否对您有帮助?
  • Icon free helper
    Close