Appearance
加入频道
加入频道是开始 RTC 通信的第一步。用户需要提供有效的认证信息才能成功加入频道。
joinChannel
加入频道的主要方法。
方法签名
typescript
joinChannel(authInfoOrToken: AliRtcAuthInfo | string, userNameOrParam?: string | AliRtcChannelParam, extraData?: any): Promise<void>参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| authInfoOrToken | AliRtcAuthInfo | string | 认证信息对象或 token 字符串 |
| userNameOrParam | string | AliRtcChannelParam | 用户名或频道参数对象 |
| extraData | any | 额外数据(可选) |
使用方式
1. 使用完整认证信息对象
javascript
const authInfo = {
channelId: 'test-channel-001',
userId: 'user-12345',
appId: 'your-app-id',
timestamp: Date.now(),
token: 'your-jwt-token',
nonce: 'random-nonce',
sessionId: 'session-001',
role: AliRtcEngine.AliRtcSdkTokenRole.AliRtcSdkTokenRoleAppServer,
};
try {
await engine.joinChannel(authInfo);
console.log('成功加入频道');
} catch (error) {
console.error('加入频道失败:', error);
}2. 使用 Token 字符串(简化方式)
javascript
const token = 'your-jwt-token';
const userName = '张三';
try {
await engine.joinChannel(token, userName);
console.log('成功加入频道');
} catch (error) {
console.error('加入频道失败:', error);
}3. 使用频道参数对象
javascript
const authInfo = {
channelId: 'test-channel-001',
userId: 'user-12345',
appId: 'your-app-id',
timestamp: Date.now(),
token: 'your-jwt-token',
};
const channelParam = {
userName: '张三',
capabilityProfile: AliRtcEngine.AliRtcCapabilityProfile.Human,
};
try {
await engine.joinChannel(authInfo, channelParam);
console.log('成功加入频道');
} catch (error) {
console.error('加入频道失败:', error);
}加入频道前的准备工作
1. 设置频道模式
javascript
// 通信模式(默认)- 适用于一对一或小群组通话
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcSdkCommunication);
// 互动直播模式 - 适用于直播场景
engine.setChannelProfile(AliRtcEngine.AliRtcSdkChannelProfile.AliRtcInteractiveLive);2. 设置用户角色(仅互动直播模式)
javascript
// 设置为主播角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkInteractive);
// 设置为观众角色
engine.setClientRole(AliRtcEngine.AliRtcSdkClientRole.AliRtcSdkLive);3. 设置默认订阅行为
javascript
// 设置是否默认订阅所有远端音频流
engine.setDefaultSubscribeAllRemoteAudioStreams(true);
// 设置是否默认订阅所有远端视频流
engine.setDefaultSubscribeAllRemoteVideoStreams(true);4. 添加事件监听器
javascript
// 监听连接状态变化
engine.on('connectionStatusChange', (status, reason) => {
console.log('连接状态变化:', status, reason);
handleConnectionStatusChange(status, reason);
});
// 监听远端用户上线
engine.on('remoteUserOnLineNotify', uid => {
console.log('远端用户上线:', uid);
onRemoteUserJoined(uid);
});常见问题
1. 重复加入频道
javascript
async function safeJoinChannel(authInfo) {
if (engine.isInCall()) {
console.log('已在频道中,先离开当前频道');
await engine.leaveChannel();
}
await engine.joinChannel(authInfo);
}2. 网络异常处理
javascript
engine.on('connectionStatusChange', (status, reason) => {
switch (status) {
case AliRtcEngine.AliRtcConnectionStatus.AliRtcConnectionStatusDisconnected:
if (reason === AliRtcEngine.AliRtcConnectionStatusChangeReason.AliRtcConnectionChangedNetworkInterrupted) {
console.log('网络中断,等待自动重连...');
showReconnectingMessage();
}
break;
case AliRtcEngine.AliRtcConnectionStatus.AliRtcConnectionStatusReconnecting:
console.log('正在重新连接...');
break;
case AliRtcEngine.AliRtcConnectionStatus.AliRtcConnectionStatusConnected:
console.log('重连成功');
hideReconnectingMessage();
break;
case AliRtcEngine.AliRtcConnectionStatus.AliRtcConnectionStatusFailed:
console.log('连接失败,请检查网络');
showConnectionFailedDialog();
break;
}
});