全部產品
Search
文件中心

ApsaraVideo Live:頻道串連狀態管理

更新時間:Mar 26, 2025

通過閱讀本文,可以瞭解各種頻道串連狀態,狀態改變原因和應該採取的處理方式。

功能介紹

在即時音視頻情境中,用戶端與服務端之間的串連狀態會隨著使用者加入或離開頻道而發生變化,同時也可能因使用者網路問題導致重新串連或斷開。因此,對頻道串連狀態進行有效管理至關重要,這不僅直接影響使用者的即時音視頻體驗,還涉及整個應用的穩定性與可靠性。

功能原理

串連狀態

當串連狀態發生變化時,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

初始狀態,發生在調用joinChannel之前。

Connecting

調用 joinChannel方法後的瞬時狀態。

Connected

發生在 App 成功加入頻道後。

SDK 還會觸發 onJoinChannelResult回調,上報本地用戶端已經加入頻道。 此時SDK會自動發布或訂閱頻道中的音頻和視頻,使用者也可以手動控制發布和訂閱。

Disconnected

發生在調用 leaveChannel 之後。

Reconnecting

發生在串連中斷時。SDK 會在中斷後自動嘗試重新串連。

如果重新加入頻道成功,SDK 會觸發 onConnectionStatusChange

(AliRtcConnectionStatusConnected,AliRtcConnectionChangedSignalingJoinChannelSuccess)

Failed

串連失敗。發生在 SDK 在 100秒內無法加入頻道、並且 SDK 停止重新串連頻道時。 此時使用者需要調用leaveChannel,檢查本網後,網路恢複正常後再調用joinChannel

狀態原因說明

串連狀態(status)

狀態原因說明(reason)

Init

無原因,初始狀態。

Connecting

Connecting:加入頻道中。

Connected

JoinChannelSuccess:成功加入頻道。

Disconnected

LeaveRoom:使用者主動離開頻道。

Reconnecting

  • HeartbeatTimeout:一段時間內收不到服務端任何資料。可能是網路下行不通、網路丟包過高等原因。

  • NetworkInterrupted:用戶端網路斷開。

Failed

JoinChannelFailure:加入房間失敗或重新加入房間失敗。可能是網路斷開一直沒有恢複、token 無效等原因。