通過閱讀本文,可以瞭解各種頻道串連狀態,狀態改變原因和應該採取的處理方式。
功能介紹
在即時音視頻情境中,用戶端與服務端之間的串連狀態會隨著使用者加入或離開頻道而發生變化,同時也可能因使用者網路問題導致重新串連或斷開。因此,對頻道串連狀態進行有效管理至關重要,這不僅直接影響使用者的即時音視頻體驗,還涉及整個應用的穩定性與可靠性。
功能原理
串連狀態
當串連狀態發生變化時,ARTC SDK會觸發onConnectionStatusChange回調。下圖展示了各種串連狀態,以及使用者在加入和離開頻道過程中串連狀態的變化。
斷線重連
通話過程中,如果因網路問題導致串連斷開,SDK 會自動重連。下圖展示使用者A(User A)和使用者B(User B)在以下過程中收到的回調:假設UserB已在頻道中,User A加入頻道、發生網路異常自動重連、重連失敗。
T0時:User A發起
joinChannel請求.T1時:User A加入頻道成功,收到
onJoinChannelResult(result=0)和onConnectionStatusChange的回調。T2時:User B感知User A加入房間,收到
onRemoteUserOnLineNotify回調。T3時:User A因為用戶端斷網等原因導致串連斷開。
T4時:User A SDK檢測到網路斷開或者一段時間內收不到服務端發送的任何資料,會發起自動重連,同時User A收到
onConnectionStatusChange的回調。T5時:SDK在100秒內多次重試依然無法重新加入頻道,不再繼續嘗試,向User A回調
onConnectionStatusChange。此時使用者需要退出目前通道,檢查本網後,網路恢複正常後重新加入頻道。
程式碼範例
Android
onConnectionStatusChange - 網路連接狀態改變回調
@Override
public void onConnectionStatusChange(AliRtcEngine.AliRtcConnectionStatus status, AliRtcEngine.AliRtcConnectionStatusChangeReason reason) {
super.onConnectionStatusChange(status, reason);
Log.e(TAG, "onConnectionStatusChange.");
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mLogView != null) {
mLogView.logI("網路連接變化為:" + status + ",原因為:" + reason);
}
}
});
}iOS
onConnectionStatusChange - 網路連接狀態改變的回調
/**
* @brief 頻道串連狀態改變的回調
* @param status 目前狀態值, 對應值參考枚舉AliRtcConnectionStatus
* @param reason 引起狀態變化的具體原因, 對應值參考枚舉AliRtcConnectionStatusChangeReason
*/
- (void)onConnectionStatusChange:(AliRtcConnectionStatus)status reason:(AliRtcConnectionStatusChangeReason)reason{
NSString *stateStr = [NSString stringWithFormat:@"\n網路狀態:%@ status: %ld 原因:%@ reason:%ld\n",[self callbackNetstatus:status], (long)status,[self callbackNetstatusReason:reason], (long)reason];
MyLog(@"%@", stateStr);
}Windows
OnConnectionStatusChange - 網路連接狀態改變的回調
void AliSDKEventListener::OnConnectionStatusChange(int status, int reason)
{
if (win_rtc_listener_)
{
win_rtc_listener_->OnConnectionStatusChange(status, reason);
}
}狀態說明
串連狀態
串連狀態 | 描述 |
Init | 初始狀態,發生在調用 |
Connecting | 調用 |
Connected | 發生在 App 成功加入頻道後。 SDK 還會觸發 |
Disconnected | 發生在調用 |
Reconnecting | 發生在串連中斷時。SDK 會在中斷後自動嘗試重新串連。 如果重新加入頻道成功,SDK 會觸發 onConnectionStatusChange (AliRtcConnectionStatusConnected,AliRtcConnectionChangedSignalingJoinChannelSuccess) |
Failed | 串連失敗。發生在 SDK 在 100秒內無法加入頻道、並且 SDK 停止重新串連頻道時。 此時使用者需要調用 |
狀態原因說明
串連狀態(status) | 狀態原因說明(reason) |
Init | 無原因,初始狀態。 |
Connecting | Connecting:加入頻道中。 |
Connected | JoinChannelSuccess:成功加入頻道。 |
Disconnected | LeaveRoom:使用者主動離開頻道。 |
Reconnecting |
|
Failed | JoinChannelFailure:加入房間失敗或重新加入房間失敗。可能是網路斷開一直沒有恢複、token 無效等原因。 |