Einstieg WebRTC - bjoern621/PeerDrop GitHub Wiki

Hier sind einige nützliche Links zu WebRTC.

Konzept WebRTC ("WebRTC API" & "WebRTC concepts and usage"): https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API

Allgemeiner Verbindungsaufbau: https://webrtc.org/getting-started/peer-connections

"Perfect Negotiation": https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Perfect_negotiation

Debugging im Browser: edge://webrtc-internals/ (chrome://webrtc-internals/)

Beispielimplementation in TS und Go: https://github.com/bjoern621/ScreenEcho

  • Der Konstruktor von frontend\src\services\RoomService.ts baut eine Verbindung zum Server auf. Stichworte: "WebSocket" und "Signaling"
    • Das Backend empfängt diesen Call vom Frontend in backend\rooms\manager.go HandleConnect().
    • Nach dem HandleConnect() sind Client und Server mit einem WebSocket verbunden und Nachrichten können ausgetauscht werden.
  • Der Signaling-Kanal ist somit erfolgreich erstellt.
  • Nachdem PeerA ein Stream gestartet wird, beginnt die eingentliche WebRTC Connection:
    • Bei PeerA wird frontend\src\services\webrtc\WebRTCService.ts setLocalStream() aufgerufen und somit peer.start(stream);.
    • Dadurch wird in frontend\src\services\webrtc\PerfectPeer.ts vor allem this.peerConnection.addTrack() (Zeile 181) aufgerufen, was wiederum handleNegotiationNeeded() triggert. Siehe dazu auch diese "Note" oben auf dieser Seite.
    • Bei PeerB wird nach einer kurzen Weile forwardSDPMessageToRespectivePeer() in WebRTCService.ts aufgerufen, weil eine WebSocket Nachricht "sdp-message" empfangen wird.
    • PeerB sorgt dann dafür, dass eine entsprechende WebRTC Verbindung aufgebaut werden kann in dem handleRemoteSDPMessage() aufgerufen wird.