WebRTC 創建點對點鏈接(日誌分析)

對於初次接觸 WebRTC 的小白來講,想要理解如何創建一個點對點鏈接仍是有必定的難度的,雖然網上的點對點鏈接 demo 一大堆,可是從代碼角度去理解仍是有必定的難度,還好 「Basic peer connection」 demo 不只提供了源代碼,並且還添加了詳細的日誌信息,所以打算從運行的日誌角度,再結合網上比較好的文章來理解分析,但願這個思路對您也有幫助!

先拜讀一下「天鑲」 的WebRTC 入門文章,我感受是WebRTC 中文文章中比較 OK 的。

使用WebRTC搭建前端視頻聊天室——入門篇
使用WebRTC搭建前端視頻聊天室——信令篇
使用WebRTC搭建前端視頻聊天室——點對點通訊篇
使用WebRTC搭建前端視頻聊天室——數據通道篇


1、獲取點對點日誌

一、使用Google 瀏覽器訪問:https://github.com/webrtc/samples,提供的「Basic peer connection」 demo

二、鼠標右鍵,點擊「審查元素」,打開 "Console" 控制檯

三、點擊「Basic peer connection」 demo 頁面的「Start」、「Call」按鈕,創建一個點對點鏈接(基於同一個Web 頁面,模擬點對點鏈接)

四、在Consle 控制檯,鼠標右鍵,點擊「Save as」保存運行日誌

 

2、日誌信息與分析:

This appears to be Chrome
12.722: Requesting local stream(請求本地音視頻流,即調用本地的攝像頭與麥克風)
spec:   {"audio":true,"video":true}
chrome: {"audio":true,"video":true}
chrome: {"audio":true,"video":true}
14.022: Received local stream調用本地的攝像頭與麥克風成功,得到音視頻流 stream 對象)
15.321: Local video videoWidth: 640px,  videoHeight: 480px
98.136: Starting call(呼叫遠程 peer)
98.137: Using video device: Lenovo EasyCamera (174f:14ee)
98.137: Using audio device: 麥克風 (Realtek High Definition Audio)
98.137: Created local peer connection object pc1(建立本地的 PeerConnection 對象 pc1)
98.141: Created remote peer connection object pc2(建立遠程的 PeerConnection 對象 pc1)
98.143: Added local stream to pc1(本地音視頻流添加到PeerConnection 對象 pc1 對象)
98.144: pc1 createOffer start(pc1 開始建立 Offer 信令成功
98.146: Offer from pc1 (pc1 建立 Offer 信令成功,以下所示)
v=0

o=- 1942065961337070347 2 IN IP4 127.0.0.1

s=-

t=0 0

a=group:BUNDLE audio video

a=msid-semantic: WMS rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p

m=audio 9 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:33zghkUynpdQ7JDG

a=ice-pwd:gA6+vMk0K/TpuJoHN7QNTWSw

a=fingerprint:sha-256 65:84:AE:4D:4C:75:21:15前端

B:3E:57:62:A4:17:EB:C8:22:E1:FA:5B:6A:38:FB:A6:9E:E01:EA:B2:E1:34:49

a=setup:actpass

a=mid:audio

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=sendrecv

a=rtcp-mux

a=rtpmap:111 opus/48000/2

a=fmtp:111 minptime=10; useinbandfec=1

a=rtpmap:103 ISAC/16000

a=rtpmap:104 ISAC/32000

a=rtpmap:9 G722/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:106 CN/32000

a=rtpmap:105 CN/16000

a=rtpmap:13 CN/8000

a=rtpmap:126 telephone-event/8000

a=maxptime:60

a=ssrc:2847625965 cname:FPxGs1+4IS0LJpcR

a=ssrc:2847625965 msid:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p d21f0789-d0f7-4b04-b9ee-134b56bd77a3

a=ssrc:2847625965 mslabel:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p

a=ssrc:2847625965 label:d21f0789-d0f7-4b04-b9ee-134b56bd77a3

m=video 9 RTP/SAVPF 100 116 117 96

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:33zghkUynpdQ7JDG

a=ice-pwd:gA6+vMk0K/TpuJoHN7QNTWSw

a=fingerprint:sha-256 65:84:AE:4D:4C:75:21:15git

B:3E:57:62:A4:17:EB:C8:22:E1:FA:5B:6A:38:FB:A6:9E:E01:EA:B2:E1:34:49

a=setup:actpass

a=mid:video

a=extmap:2 urn:ietf:params:rtp-hdrext:toffset

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=extmap:4 urn:3gpp:video-orientation

a=sendrecv

a=rtcp-mux

a=rtpmap:100 VP8/90000

a=rtcp-fb:100 ccm fir

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=rtcp-fb:100 goog-remb

a=rtpmap:116 red/90000

a=rtpmap:117 ulpfec/90000

a=rtpmap:96 rtx/90000

a=fmtp:96 apt=100

a=ssrc-group:FID 2259890580 1253285440

a=ssrc:2259890580 cname:FPxGs1+4IS0LJpcR

a=ssrc:2259890580 msid:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p c402a35d-4298-4a6b-ad8a-c4d6dbfde67f

a=ssrc:2259890580 mslabel:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p

a=ssrc:2259890580 label:c402a35d-4298-4a6b-ad8a-c4d6dbfde67f

a=ssrc:1253285440 cname:FPxGs1+4IS0LJpcR

a=ssrc:1253285440 msid:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p c402a35d-4298-4a6b-ad8a-c4d6dbfde67f

a=ssrc:1253285440 mslabel:rICA7eip7IWV3m6Yp08Hz5cA1AvhLrfQT23p

a=ssrc:1253285440 label:c402a35d-4298-4a6b-ad8a-c4d6dbfde67f
98.147: pc1 setLocalDescription start(pc1 對象將 offer信令經過服務器發送給遠程的 pc2 對象
98.148: pc2 setRemoteDescription start(pc2 接收到 pc1 的 Offer 信令並提取其中所包含的SDP 描述符)
98.149: pc2 createAnswer start(pc2 建立一個包含遠程 peer 的SDP 描述符的 Answer 信令)
98.178: pc1 setLocalDescription complete(pc1 發送 Offer 信令完畢)
98.178: pc2 setRemoteDescription complete(pc2 接收 Offer 信令完畢)
98.179: Answer from pc2:(pc2 開始建立 Answer 信令成功,以下所示
v=0

o=- 5093582210222064371 2 IN IP4 127.0.0.1

s=-

t=0 0

a=group:BUNDLE audio video

a=msid-semantic: WMS

m=audio 9 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:ubQcfltTHAop9S73

a=ice-pwd:tM0zrbhW4uKe+h8Y9hVYkRQK

a=fingerprint:sha-256 65:84:AE:4D:4C:75:21:15github

B:3E:57:62:A4:17:EB:C8:22:E1:FA:5B:6A:38:FB:A6:9E:E01:EA:B2:E1:34:49

a=setup:active

a=mid:audio

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=recvonly

a=rtcp-mux

a=rtpmap:111 opus/48000/2

a=fmtp:111 minptime=10; useinbandfec=1

a=rtpmap:103 ISAC/16000

a=rtpmap:104 ISAC/32000

a=rtpmap:9 G722/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:106 CN/32000

a=rtpmap:105 CN/16000

a=rtpmap:13 CN/8000

a=rtpmap:126 telephone-event/8000

a=maxptime:60

m=video 9 RTP/SAVPF 100 116 117 96

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:ubQcfltTHAop9S73

a=ice-pwd:tM0zrbhW4uKe+h8Y9hVYkRQK

a=fingerprint:sha-256 65:84:AE:4D:4C:75:21:15web

B:3E:57:62:A4:17:EB:C8:22:E1:FA:5B:6A:38:FB:A6:9E:E01:EA:B2:E1:34:49

a=setup:active

a=mid:video

a=extmap:2 urn:ietf:params:rtp-hdrext:toffset

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=extmap:4 urn:3gpp:video-orientation

a=recvonly

a=rtcp-mux

a=rtpmap:100 VP8/90000

a=rtcp-fb:100 ccm fir

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=rtcp-fb:100 goog-remb

a=rtpmap:116 red/90000

a=rtpmap:117 ulpfec/90000

a=rtpmap:96 rtx/90000

a=fmtp:96 apt=100
98.180: pc2 setLocalDescription start(遠程的pc2 對象將 Answer 信令經過服務器發送給本地的 pc1 對象
98.182: pc1 setRemoteDescription start(pc1 接收到 pc2 的 Answer 信令並提取其中所包含的SDP 描述符
98.203: pc1 ICE candidate: 
candidate:3031090232 1 udp 2122260223 192.168.1.20 52118 typ host generation 0
98.203: pc1 ICE candidate: 
candidate:3031090232 2 udp 2122260222 192.168.1.20 52119 typ host generation 0
98.204: pc2 received remote stream(pc2 或獲得 pc1 音視頻流)
98.204: pc2 setLocalDescription complete(pc2 發送 Answer 信令完畢)
98.205: pc1 setRemoteDescription complete(pc1 接收 Answer 信令完畢)
98.205: pc1 addIceCandidate success (pc1 添加 IceCandidate 成功)
98.206: pc2 ICE state: checking
ICE state change event:  Event {}
98.239: pc2 ICE candidate: 
candidate:3031090232 1 udp 2122260223 192.168.1.20 52122 typ host generation 0
98.240: pc2 ICE candidate: 
candidate:3031090232 1 udp 2122260223 192.168.1.20 52122 typ host generation 0
98.242: pc1 ICE candidate: 
candidate:3031090232 1 udp 2122260223 192.168.1.20 52120 typ host generation 0
98.249: pc1 ICE candidate: 
candidate:3031090232 2 udp 2122260222 192.168.1.20 52121 typ host generation 0
98.249: pc1 ICE state: checking
ICE state change event:  Event {}
98.250: pc2 addIceCandidate success(pc2 添加 IceCandidate 成功)
98.250: pc1 addIceCandidate success
98.272: pc1 ICE state: completed
ICE state change event:  Event {}
98.275: pc1 ICE state: completed
ICE state change event:  Event {}
98.279: pc2 ICE state: connected
ICE state change event:  Event {}
98.349: Remote video size changed to 640x480
98.349: Setup time: 212.435ms
98.349: Remote video videoWidth: 640px,  videoHeight: 480px
98.350: Remote video size changed to 640x480
135.775: Ending callchrome

相關文章
相關標籤/搜索