iT邦幫忙

0

WebRTC相關問題

  • 分享至 

  • xImage

最近在開發WebRTC的專案,想釐清一下觀念:
1.整個RTCPeerConnection的流程是這樣嗎:
1. new RTCPeerConnection
2. addStream
3. createOffer => 這步是幹嘛的?
4. setLocalDescription,送出本地的SDP => 這步開始才會送出ice查詢嗎?
5. 收到remote SDP,setRemoteDescription
6. 開始peer to peer

2.那有沒有可能在知道對象電腦ip的狀況下,直接建立連線,做測試用?

不知道能不能召喚一下佛陀大人來回答一下,哈。

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2018-12-28 14:45:23 檢舉
WebRTC連接是兩段式,先透過非WebRTC的方式(例如雙方用Websocket透過伺服器交換資料)把雙方網路資訊做交換,然後用這些資訊透過stun/turn伺服器穿過NAT來直接連線。createOffer是做第一段準備的一部分。
fillano iT邦超人 1 級 ‧ 2018-12-28 14:46:28 檢舉
https://webrtc.github.io/samples/src/content/peerconnection/pc1/

這裡的程式有持續在更新,我已經幾年沒碰。
froce iT邦大師 1 級 ‧ 2018-12-28 15:19:06 檢舉
哈,我後來找到MDN有天機圖:
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling
照著做就行,現在我在試著建一個模擬本地到遠端的單獨網頁,概念跟上面給的網頁一樣,只是為了完全理解,目前在自己重寫。

感謝fillano回答,其實您的大作也在我的參考資料裡面。
fillano iT邦超人 1 級 ‧ 2018-12-28 18:01:57 檢舉
XD
froce iT邦大師 1 級 ‧ 2019-01-03 09:43:49 檢舉
https://github.com/frocelu/WebRTC_LocalToLocal_example

有同樣需求的請自取。
因為概念比較簡單,應該稍微比google的那篇好懂一點。

sendSDP和getAnswer是發起者端的,實際在應用上應該是要整合成一個,透過事件來處理SDP。
reciveSDP是接收端的。
中間傳SDP是故意透過JSON,模擬信道透過網路傳送的狀況。

不過因為 RTCPeerConnection 都是異步的,所以加了一堆await,感謝JS加入async/await。
(這其實是第2版,第1版用 then() 寫發現以我的JS功力還是避不了callback hell)

接下來的目標大概是看看能不能寫出正常能用的sender/reciver端,最後用RxJS來組合整段code。
WebRTC 在做 p2p 連線前,需要透過一個 signaling server 負責傳遞兩個 client 之間的
1. SDP, (https://tools.ietf.org/pdf/rfc4566.pdf)
2. ICE Candidate (https://datatracker.ietf.org/doc/html/rfc5245 )

先發起的那方就會產生一個叫做 Offer 的東西,他會去看這個裝置他支援哪些編解碼的功能,還有是否支援哪些壅塞控制的協議,比如 H264, VP8, VP9, Opus 等等的東西。
對方收到 Offer SDP 之後,就需要回覆自己可以支援哪些編碼跟壅塞控制,然後回傳 Answer SDP ,兩邊的 SDP 交換完畢後,確定可以連線後,才會進行 p2p 的連線。

當然兩邊自己開出來的 ip & port 就是透過 ice candidate 丟給對方,讓對方可以互相聯絡。

如果兩邊在防火牆後面的話,沒法直接 p2p 連線,就需要設置 coturn ,讓 coturn server 負責轉發對方的封包。
那比較細節的部分
setLocalDescription 之後,才會開始去產生 ICE Candidate 還有跟 coturn 註冊 relay candidate
這個部分要看 c++ 的原始碼比較好理解。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答