跳转至

媒体流

Stream 模块可通过 RongRTC 实例 获取

new Stream(option)

option 对象说明:

参数 类型 必填 默认值 说明 最低版本
published function 成员发布资源,此时可按需订阅 3.0.0
unpublished function 成员取消发布资源 3.0.0
disabled function 成员禁用摄像头 3.0.0
enabled function 成员启用摄像头 3.0.0
muted function 成员静音 3.0.0
unmuted function 成员取消静音 3.0.0

事件返回参数 user 说明:

属性 类型 说明 最低版本
id string 成员 Id 3.0.0
stream object 成员发布媒体流对象 3.0.0

事件返回参数 user.stream 说明

属性 类型 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0
mediaStream MediaStream MediaStream 对象,可直接渲染至 UI 3.0.0

示例:

let stream = new Stream({
  /* 成员已发布资源,此时可按需订阅 */
  published: function(user){
    stream.subscribe(user).then((user) => {
      let {id, stream: {tag, mediaStream}} = user;
      let node = document.createElement('video');
      node.srcObject = mediaStream;
      // 将 node 添加至页面或指定容器
    });
  },
  /* 成员已取消发布资源,此时需关闭流 */
  unpublished: function(user){
    stream.unsubscribe(user);
  },
  /* 成员禁用摄像头时触发,此时需关闭视频流 */
  disabled: function(user){
    stream.unsubscribe(user);
  },
  /* 成员启用摄像头时触发,此时需要重新打开视频流 */
  enabled: function(user){
    stream.subscribe(user);
  },
  /* 成员禁用麦克风时触发 */
  muted: function(user){
    
  },
  /* 成员禁用麦克风时触发,此时需要重新打开此成员声音 */
  unmuted: function(user){
    stream.subscribe(user);
  }
});
stream.get(constraints)

获取本地资源,支持获取屏幕共享、摄像头资源

constraints 对象说明:

参数 类型 必填 默认值 说明 最低版本
height number 480 视频流高 3.0.0
width number 640 视频流宽 3.0.0
frameRate number 15 帧率 3.0.0
screen boolean false 设置为 true 获取屏幕媒体流 (仅 Chrome 有效) 3.0.0
desktopStreamId string 窗口 Id,通过 Chrome 插件可获取 3.0.0
audioDeviceId string 存在多麦克风设备,可通过此属性指定设备,用 device.get() 获取 deviceId 3.0.0
videoDeviceId string 存在多摄像头设备,可通过此属性指定设备,用 device.get() 获取 deviceId 3.0.0

示例:

// audioDeviceId videoDeviceId , 均可从 device.get() 方法获取
let audioDeviceId = '';
let videoDeviceId = '';
// 获取摄像头
stream.get().then(function ({ mediaStream }) {
  console.log(mediaStream);
}, error => {
  console.error(error);
});
// 获取屏幕共享
stream.get({
  screen: true,
  desktopStreamId: 'desktopStreamId',
  audio: {
    //指定麦克风设备 Id
    deviceId: { exact: audioDeviceId }
  },
  video: {
    //指定摄像头设备 Id
    deviceId: { exact: videoDeviceId }
  },

}).then(function ({ mediaStream }) {
  console.log(mediaStream);
}, error => {
  console.error(error);
});
stream.publish(user)

SDK 支持发布多路媒体流,发布后 SDK 会向服务器推送多路流,其他平台收到多路流,可按需展示

user 参数说明:

参数 类型 必填 说明 最低版本
id string 成员 ID 3.0.0
stream object 资源对象 3.0.0

user.stream 参数说明:

参数 类型 必填 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0
mediaStream object MediaStream 对象 3.0.0

示例:

// 示例中以添加 video 节点流为例,可添加其他 MediaStream 对象,如: 屏幕共享、多摄像头等
let videoNode = document.querySelector('#target');
let mediaStream = videoNode.captureStream();
let user = {
  id: 'dadklyeu78',
  stream: {    
    tag: '自定义流标签',
    type: StreamType.AUDIO_AND_VIDEO,
    mediaStream: mediaStream
  }
};
stream.publish(user).then(() => {
  console.log('发布成功');
}, error => {
  console.log(error);
});
stream.unpublish(user)

取消发布

user 参数说明:

参数 类型 必填 说明 最低版本
id string 成员 ID 3.0.0
stream object 资源对象 3.0.0

user.stream 参数说明:

参数 类型 必填 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0

示例:

let user = {
  id: 'dadklyeu78',
  stream: {
    tag: '自定义流标签',
    type: StreamType.AUDIO_AND_VIDEO
  } 
};
stream.unpublish(user).then(result => {
  console.log('取消推送成功');
}, error => {
  console.log(error);
});
stream.subscribe(user)

订阅房间内成员发布资源

user 参数说明:

参数 类型 必填 说明 最低版本
id string 成员 ID 3.0.0
stream object 资源对象 3.0.0

user.stream 参数说明:

参数 类型 必填 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0

示例:

let user = {
  id: 'dadklyeu78',
  stream: {
    tag: '自定义流标签',
    type: StreamType.AUDIO_AND_VIDEO
  } 
};
stream.subscribe(user).then(user => {
  let {id, stream: {tag, mediaStream}} = user;
  let node = document.createElement('video');
  node.srcObject = mediaStream;
  // 添加 node 至页面或容器
}, error => {
  console.log(error);
});
stream.unsubscribe(user)

取消订阅成员资源

user 参数说明:

参数 类型 必填 说明 最低版本
id string 成员 ID 3.0.0
stream object 资源对象 3.0.0

user.stream 参数说明:

参数 类型 必填 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0

示例:

let user = {
  id: 'dadklyeu78',
  stream: {
    tag: '自定义流标签',
    type: StreamType.AUDIO_AND_VIDEO
  } 
};
stream.unsubscribe(user).then(() => {
  console.log(`取消订阅 ${user.id} 媒体流成功`);
}, error => {
  console.log(error);
});
stream.subscribe({liveUrl:liveUrl})

注意事项

仅直播模式,观众角色可用。

观众订阅直播视频资源

user 参数说明:

参数 类型 必填 说明 最低版本
liveUrl string 直播视频返回的 liveUrl 3.2.0

示例:

stream.subscribe({liveUrl:liveUrl}).then((res) => {
  let { mediaStream} = res;
  let node = document.createElement('video');
  node.autoplay = true;
  node.srcObject = mediaStream;
  document.body.appendChild(node);
});
stream.resize(user)

切换房间内成员媒体流分辨率大小的方法,在大小窗口切换时可将小窗口设置为小分辨率媒体流流,用来节省带宽,详细请参考 StreamSize

user 参数说明:

参数 类型 必填 说明 最低版本
id string 成员 ID 3.0.0
stream object 资源对象 3.0.0

user.stream 参数说明:

参数 类型 必填 说明 最低版本
tag string 资源唯一标识 3.0.0
type number 发布资源类型 3.0.0
size number 大小流枚举值 3.0.0

示例:

let user = {
  // 房间内成员 Id
  id: 'kdad18dka',
  stream: {
    tag: '自定义流标签',
    type: StreamType.AUDIO_AND_VIDEO,
    size: StreamSize.MAX
  }
};
Stream.resize(user);
stream.setMixConfig(option)

注意事项

混流布局设置,此设置仅对直播模式有效。

此设置为了修改直播模式下升级主播后的布局样式,目前提供设置三种模式,悬浮布局,自适应布局,自定义布局。

option 参数说明:

参数 类型 必填 说明 最低版本
layoutMode number 布局模式 3.2.0
video object 己方发布 video 的配置项 3.2.0
audio object 己方发布 audio 的配置项 3.2.0
hostUserId string 主播 UserId 3.2.0
customLayout object 自定义布局设置 3.2.0

option.video 参数说明:

参数 类型 必填 说明 最低版本
renderMode string 裁剪方式, 默认为 RenderMode.CROP 3.2.0
width number 视频宽度 3.2.0
height number 视频高度 3.2.0
fps number 视频帧率 3.2.0
bitrate number 视频码率 3.2.0

option.audio 参数说明:

参数 类型 必填 说明 最低版本
bitrate number 音频码率 3.2.0

option.customLayout 参数说明:

注意事项

仅 layoutMode 为自定义布局时需传入

参数 类型 必填 说明 最低版本
video Array 仅 layoutMode 为自定义布局时需传入 3.2.0

customLayout.video 参数说明:

参数 类型 必填 说明 最低版本
userId string 升级主播用户 ID 3.2.0
width number 视频宽度 3.2.0
height number 视频高度 3.2.0
x number X 轴坐标 3.2.0
y number Y 轴坐标 3.2.0

示例:

let options = {
  layoutMode: RongRTC.LayoutMode.SUSPENSION, // 布局模式
  video: { // 己方发布 video 的配置项, 非必填
    renderMode: RongRTC.RenderMode.CROP, // 裁剪方式, 默认为 RenderMode.CROP
    width: 360, // 非必填, 不填则按传入视频大小计算
    height: 640,  // 非必填, 不填则按传入视频大小计算
    fps: 15, 
    bitrate: 800 
  },
  audio: { // 己方发布 audio 的配置项, 非必填
    bitrate: 800 
  },
  hostUserId: '111',
  customLayout: { // 仅 layoutMode 为自定义布局时需传入
    video: [{
      "userId": "111",
      "x": 0,
      "y": 0,
      "width": 180,
      "height": 320
    }]
  }
}
stream.setMixConfig(options).then(() => {
  console.log(`设置成功`);
}, error => {
  console.log(error);
});
audio.mute(user)

静音指定成员,静音后当前成员将无法听到指定成员声音

例如: ABC 三人进行音视频通话,AB 静音后,A 无法听到 B 的声音, C 不受影响,依然可听到 B 的声音

Audio 实例可通过 Stream 实例 获取

user 参数说明:

参数 类型 必填 说明 最低版本
id string 当前成员 ID 3.0.0

示例:

let {audio: audioStream} = stream;
let user = {
  id: 'diajle91',
  stream: {
    tag: '自定义流标签'
  }
};
audioStream.mute(user);
audio.unmute(user)

取消静音, audio 实例可通过 stream 实例 获取

user 参数说明:

参数 类型 必填 说明 最低版本
id string 当前成员 Id 3.0.0

示例:

let {audio: audioStream} = stream;
let user = {
  id: 'diajle91',
  stream: {
    tag: '自定义流标签'
  }
};
audioStream.unmute(user);
video.disable(user)

video 实例可通过 Stream 实例 获取

禁用指定成员摄像头,禁用后将无法看到指定成员视频

例如: ABC 三人进行音视频通话,AB 视频流禁用后,A 无法看到 B 的视频流, C 不受影响,依然可看到 B 的视频流

user 参数说明:

参数 类型 必填 说明 最低版本
id string 当前成员 Id 3.0.0

示例:

let {video: videoStream} = stream;
let user = {
  id: 'dadklyeu78',
  stream: {
    tag: '自定义流标签'
  }
};
videoStream.disable(user);
video.enable(user)

video 实例可通过 Stream 实例 获取

启用指定成员摄像头, 启用后将看到指定成员视频

user 参数说明:

参数 类型 必填 说明 最低版本
id string 当前成员 ID 3.0.0

示例:

let {video: videoStream} = stream;
let user = {
  id: 'dadklyeu78',
  stream: {
    tag: '自定义流标签'
  }
};
videoStream.enable(user);