本文主要分析webrtc音視頻點對點部分的代碼結構,文章來自博客園RTC.Blacker,轉載請說明出處.
前段時間在查一個偶爾斷線的問題(這種問題最蛋疼,不好重現,只能憑經驗去搞),所以理了下webrtc的P2P代碼結構,總結如下:
先來張圖顯示實際會話過程中的兩種通訊路徑:P2P或轉發,92%的情況下是通過P2P實現.
注意:實際通訊過程中每個客戶端都會不停地發送和接收Stun包,這樣做是為了維護響應的連接和端口.
實際通訊過程中的核心組件為P2PTransportChannel,他代表着本地和遠程計算機的連接通道,
管理着許多本地和遠程計算機上許多不同的連接類型的連接對象,如TCP,udp,
連接對象上包含了本地端口和遠程地址信息,當一個連接失敗時他會無縫地切換到另一個連接上,下圖是P2P數據通道的內部結構圖
下面是代碼結構中堆棧調用過程:
1,接收和發送數據的AsyncUDPSocket創建過程如下:
2,呼叫方根據remotecandidate創建連接並執行Ping過程如下:
3、接收方根據remotecandidate創建連接並執行Ping過程如下:
4、收到Stun響應更改連接狀態調用過程如下:
5、連接成功建立開始數據收發調用過程如下: