小流与大流的相关问题

如何发布小流?怎么订阅小流?如何判断订阅了小流?小流是如何生成的?是否占用单独的 peerconnection 通道?小流有什么优缺点?一般在什么场景下使用?
发布时间: 2022-03-22 17:44

回答:

1、如何发布小流?

融云使用 publish 发布资源,默认只发布普通流(大流),当传入参数 pubTiny 为 ture 时,表示发布视频数据的同时,额外发布一个小流数据,示例代码如下:

const { code } = await room.publish([
  {
    track: videoTrack,
    pubTiny: true // pubTiny 用于指定同时发布视频数据的同时,额外发布一个小流数据
  }
])

2、怎么订阅小流?如何判断订阅了小流?

订阅小流方式与发布类似,只是 api 换成了 subscribe,由参数 subTiny 来决定是否订阅小流

const { code } = await room.subscribe([
  // 音频不支持大小流
  audioTrack,
  {
    track: videoTrack,
    subTiny: true // 订阅小流
  }
])

可以通过控制台 network 查看exchange 接口的返回的 subscribedList 中 mediaType 为 1 的视轨数据来判断,simulcast:1(大流)|2(小流)

image.png

注意点:订阅小流仅在对方发布了小流的情况下有效,若对方并未发布小流,接收的仍然是对方的大流数据。

3、小流是如何生成的?是否占用单独的 peerconnection 通道?

小流是通过 clone 原有的 localTrack,重新约束轨道的分辨率和帧率,最后添加到要发布的 stream 中

所以小流是不会单独占用 peerconnection 的,只是 MediaStream 多了一道小流的视轨。

4、小流有什么优缺点?一般在什么场景下使用?

小流默认分辨率为 W176_H144,帧率为 FPS_15,所有小流在相同的网络环境下,占用的带宽比较小,节省流量。

缺点就是画面比较小,且模糊。

一般使用场景是对画面要求不高,或者需要节省带宽,比如在小班授课或者考试场景中,只需要主窗口正常显示大流,其他窗口可以显示小流,主窗口切换时可以将小流换成大流。