Skip to content

频道配置

频道配置用于设置频道模式、用户角色等参数,影响 RTC 通信的行为。

频道模式配置

setChannelProfile

设置频道模式,决定频道的基本行为特征。

方法签名

typescript
setChannelProfile(profile: AliRtcSdkChannelProfile): void

参数说明

参数类型描述
profileAliRtcSdkChannelProfile频道模式

频道模式类型

通信模式 (AliRtcSdkCommunication)

适用于一对一或小群组通话场景。

特点:

  • 所有用户都可以发布和订阅音视频流
  • 没有角色区分
  • 适合会议、通话等场景
  • 默认模式
javascript
// 设置为通信模式
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcSdkCommunication);
互动直播模式 (AliRtcInteractiveLive)

适用于直播场景,区分主播和观众角色。

特点:

  • 主播可以发布和订阅音视频流
  • 观众只能订阅音视频流
  • 支持大量观众
  • 适合直播、在线教育等场景
javascript
// 设置为互动直播模式
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcInteractiveLive);

用户角色配置

setClientRole

设置用户在频道中的角色(仅在互动直播模式下有效)。

方法签名

typescript
setClientRole(role: AliRtcSdkClientRole): void

参数说明

参数类型描述
roleAliRtcSdkClientRole用户角色

用户角色类型

主播角色 (AliRtcSdkInteractive)

权限:

  • 可以发布音视频流
  • 可以订阅其他用户的音视频流
  • 可以进行音视频互动
javascript
// 设置为主播角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive);
观众角色 (AliRtcSdkLive)

权限:

  • 只能订阅音视频流
  • 不能发布音视频流
  • 可以观看直播内容
javascript
// 设置为观众角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);

订阅配置

默认订阅设置

setDefaultSubscribeAllRemoteAudioStreams

设置是否默认订阅所有远端音频流。

typescript
setDefaultSubscribeAllRemoteAudioStreams(sub: boolean): void
javascript
// 默认订阅所有远端音频流
engine.setDefaultSubscribeAllRemoteAudioStreams(true);

// 默认不订阅远端音频流
engine.setDefaultSubscribeAllRemoteAudioStreams(false);

setDefaultSubscribeAllRemoteVideoStreams

设置是否默认订阅所有远端视频流。

typescript
setDefaultSubscribeAllRemoteVideoStreams(sub: boolean): void
javascript
// 默认订阅所有远端视频流
engine.setDefaultSubscribeAllRemoteVideoStreams(true);

// 默认不订阅远端视频流
engine.setDefaultSubscribeAllRemoteVideoStreams(false);

视频流类型配置

setRemoteDefaultVideoStreamType

设置默认订阅的视频流类型(大流或小流)。

typescript
setRemoteDefaultVideoStreamType(streamType: AliRtcVideoStreamType): void
javascript
// 默认订阅大流
engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);

// 默认订阅小流
engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraSmall);

setRemoteUserVideoStreamType

设置特定用户的视频流类型。

typescript
setRemoteUserVideoStreamType(userId: string, streamType: AliRtcVideoStreamType): void
javascript
// 为特定用户设置订阅大流
engine.setRemoteUserVideoStreamType('user123', AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);

// 为特定用户设置订阅小流
engine.setRemoteUserVideoStreamType('user123', AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraSmall);

配置最佳实践

1. 通信场景配置

javascript
class CommunicationChannelConfig {
  constructor() {
    this.engine = AliRtcEngine.getInstance();
  }

  setupCommunicationChannel() {
    // 1. 设置为通信模式
    this.engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcSdkCommunication);

    // 2. 默认订阅所有音频流
    this.engine.setDefaultSubscribeAllRemoteAudioStreams(true);

    // 3. 默认订阅所有视频流
    this.engine.setDefaultSubscribeAllRemoteVideoStreams(true);

    // 4. 默认订阅大流(高质量)
    this.engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);

    console.log('通信模式配置完成');
  }
}

// 使用示例
const communicationConfig = new CommunicationChannelConfig();
communicationConfig.setupCommunicationChannel();

2. 直播场景配置

javascript
class LiveChannelConfig {
  constructor() {
    this.engine = AliRtcEngine.getInstance();
  }

  setupLiveChannel(isAnchor = false) {
    // 1. 设置为互动直播模式
    this.engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcInteractiveLive);

    // 2. 设置用户角色
    if (isAnchor) {
      this.setupAnchorRole();
    } else {
      this.setupAudienceRole();
    }

    console.log(`直播模式配置完成,角色: ${isAnchor ? '主播' : '观众'}`);
  }

  setupAnchorRole() {
    // 设置为主播角色
    this.engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive);

    // 主播默认订阅所有音频流
    this.engine.setDefaultSubscribeAllRemoteAudioStreams(true);

    // 主播默认订阅所有视频流
    this.engine.setDefaultSubscribeAllRemoteVideoStreams(true);

    // 主播订阅大流
    this.engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);
  }

  setupAudienceRole() {
    // 设置为观众角色
    this.engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);

    // 观众默认订阅所有音频流
    this.engine.setDefaultSubscribeAllRemoteAudioStreams(true);

    // 观众默认订阅所有视频流
    this.engine.setDefaultSubscribeAllRemoteVideoStreams(true);

    // 观众可以订阅小流以节省带宽
    this.engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraSmall);
  }

  // 观众上麦成为主播
  promoteToAnchor() {
    this.engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive);

    // 切换到大流
    this.engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);

    console.log('观众已上麦成为主播');
  }

  // 主播下麦成为观众
  demoteToAudience() {
    this.engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);

    // 切换到小流
    this.engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraSmall);

    console.log('主播已下麦成为观众');
  }
}

// 使用示例
const liveConfig = new LiveChannelConfig();

// 主播配置
liveConfig.setupLiveChannel(true);

// 观众配置
liveConfig.setupLiveChannel(false);

配置时机

1. 加入频道前配置

javascript
// 推荐:在加入频道前进行配置
async function joinChannelWithConfig(authInfo, scenario) {
  // 1. 先配置频道参数
  configureChannelForScenario(scenario);

  // 2. 再加入频道
  await engine.joinChannel(authInfo);
}

function configureChannelForScenario(scenario) {
  switch (scenario) {
    case 'meeting':
      engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcSdkCommunication);
      break;
    case 'live':
      engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcInteractiveLive);
      engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);
      break;
  }
}

2. 运行时动态配置

javascript
// 运行时切换角色
async function switchRole(newRole) {
  if (!engine.isInCall()) {
    console.warn('当前不在频道中,无法切换角色');
    return;
  }

  try {
    engine.setClientRole(newRole);
    console.log('角色切换成功');
  } catch (error) {
    console.error('角色切换失败:', error);
  }
}

注意事项

  1. 配置时机: 频道模式应在加入频道前设置,用户角色可以在运行时动态切换
  2. 模式限制: 用户角色设置仅在互动直播模式下有效
  3. 默认行为: 如果不设置,SDK 使用默认配置(通信模式,订阅所有流)
  4. 性能考虑: 观众角色订阅小流可以节省带宽和提升性能
  5. 兼容性: 确保所有参与者使用兼容的频道配置