Appearance
频道配置
频道配置用于设置频道模式、用户角色等参数,影响 RTC 通信的行为。
频道模式配置
setChannelProfile
设置频道模式,决定频道的基本行为特征。
方法签名
typescript
setChannelProfile(profile: AliRtcSdkChannelProfile): void参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| profile | AliRtcSdkChannelProfile | 频道模式 |
频道模式类型
通信模式 (AliRtcSdkCommunication)
适用于一对一或小群组通话场景。
特点:
- 所有用户都可以发布和订阅音视频流
- 没有角色区分
- 适合会议、通话等场景
- 默认模式
javascript
// 设置为通信模式
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcSdkCommunication);互动直播模式 (AliRtcInteractiveLive)
适用于直播场景,区分主播和观众角色。
特点:
- 主播可以发布和订阅音视频流
- 观众只能订阅音视频流
- 支持大量观众
- 适合直播、在线教育等场景
javascript
// 设置为互动直播模式
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcInteractiveLive);用户角色配置
setClientRole
设置用户在频道中的角色(仅在互动直播模式下有效)。
方法签名
typescript
setClientRole(role: AliRtcSdkClientRole): void参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| role | AliRtcSdkClientRole | 用户角色 |
用户角色类型
主播角色 (AliRtcSdkInteractive)
权限:
- 可以发布音视频流
- 可以订阅其他用户的音视频流
- 可以进行音视频互动
javascript
// 设置为主播角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive);观众角色 (AliRtcSdkLive)
权限:
- 只能订阅音视频流
- 不能发布音视频流
- 可以观看直播内容
javascript
// 设置为观众角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);订阅配置
默认订阅设置
setDefaultSubscribeAllRemoteAudioStreams
设置是否默认订阅所有远端音频流。
typescript
setDefaultSubscribeAllRemoteAudioStreams(sub: boolean): voidjavascript
// 默认订阅所有远端音频流
engine.setDefaultSubscribeAllRemoteAudioStreams(true);
// 默认不订阅远端音频流
engine.setDefaultSubscribeAllRemoteAudioStreams(false);setDefaultSubscribeAllRemoteVideoStreams
设置是否默认订阅所有远端视频流。
typescript
setDefaultSubscribeAllRemoteVideoStreams(sub: boolean): voidjavascript
// 默认订阅所有远端视频流
engine.setDefaultSubscribeAllRemoteVideoStreams(true);
// 默认不订阅远端视频流
engine.setDefaultSubscribeAllRemoteVideoStreams(false);视频流类型配置
setRemoteDefaultVideoStreamType
设置默认订阅的视频流类型(大流或小流)。
typescript
setRemoteDefaultVideoStreamType(streamType: AliRtcVideoStreamType): voidjavascript
// 默认订阅大流
engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraLarge);
// 默认订阅小流
engine.setRemoteDefaultVideoStreamType(AliRtcEngine.AliRtcVideoStreamType.AliRtcVideoStreamTypeCameraSmall);setRemoteUserVideoStreamType
设置特定用户的视频流类型。
typescript
setRemoteUserVideoStreamType(userId: string, streamType: AliRtcVideoStreamType): voidjavascript
// 为特定用户设置订阅大流
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);
}
}注意事项
- 配置时机: 频道模式应在加入频道前设置,用户角色可以在运行时动态切换
- 模式限制: 用户角色设置仅在互动直播模式下有效
- 默认行为: 如果不设置,SDK 使用默认配置(通信模式,订阅所有流)
- 性能考虑: 观众角色订阅小流可以节省带宽和提升性能
- 兼容性: 确保所有参与者使用兼容的频道配置