按需发布和订阅

阿里云ARTC Web SDK支持按需发布和订阅音视频流的功能。用户可以灵活决定何时发送(发布)自己的音视频流给其他人,以及何时接收(订阅)别人的音视频流。这种模式为实时通信提供了更高的灵活性和控制力,有助于满足个性化的业务需求。本文为您介绍按需发布和订阅相关功能的示例代码。

说明

SDK默认是加入频道后自动发布推流,远端用户流状态改变后自动订阅,如果您希望按需执行,可以参考以下方法。

设置按需发布音视频流

开发者可以在joinChannel前调用publishLocalVideoStream等接口关闭自动发布。

// 前提:需要先创建引擎实例
// 关闭自动发布视频流
aliRtcEngine.publishLocalVideoStream(false);
// 关闭自动发布音频流
aliRtcEngine.publishLocalAudioStream(false);
// 关闭自动发布屏幕流
aliRtcEngine.publishLocalScreenShareStream(false);

执行后,即使开启摄像头、麦克风、屏幕共享等采集也不会推流。后续如果需要发布,重新调用传入true即可重新发布推流。

设置按需订阅音视频流

开发者可以在joinChannel前调用setDefaultSubscribeAllRemoteAudioStreams等接口关闭自动订阅。

// 前提:需要先创建引擎实例
// 关闭自动订阅音频流
aliRtcEngine.setDefaultSubscribeAllRemoteAudioStreams(false);
// 关闭自动订阅视频流、屏幕流
aliRtcEngine.setDefaultSubscribeAllRemoteVideoStreams(false);

关闭自动订阅后,如果需要订阅某个用户可以使用subscribeRemoteMediaStream接口订阅。

// 通过 npm 方式引入 AliRtcVideoTrack 枚举
import { AliRtcVideoTrack } from 'aliyun-rtc-sdk';
// 或者从window上导入
// const AliRtcVideoTrack = window.AliRtcEngine.AliRtcVideoTrack;

// 该示例通过监听用户加入事件 remoteUserOnLineNotify 来主动订阅
// 实际场景您可能根据您的业务需要判断该用户需不需订阅
aliRtcEngine.on('remoteUserOnLineNotify', (userId) => {
  // 订阅该用户所有流(视频、音频、屏幕),若用户没有某些流也不会报错
  // 当用户后续推流了,就会自动订阅
  aliRtcEngine.subscribeRemoteMediaStream(
    userId,
    AliRtcVideoTrack.AliRtcVideoTrackBoth,
    true,
    true
  );
});

aliRtcEngine.on('remoteUserOffLineNotify', (userId) => {
  // 当用户离开后,可以取消订阅
});