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.tsbaut eine Verbindung zum Server auf. Stichworte: "WebSocket" und "Signaling"- Das Backend empfängt diesen Call vom Frontend in
backend\rooms\manager.goHandleConnect(). - Nach dem
HandleConnect()sind Client und Server mit einem WebSocket verbunden und Nachrichten können ausgetauscht werden.
- Das Backend empfängt diesen Call vom Frontend in
- 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.tssetLocalStream() aufgerufen und somitpeer.start(stream);. - Dadurch wird in
frontend\src\services\webrtc\PerfectPeer.tsvor allemthis.peerConnection.addTrack()(Zeile 181) aufgerufen, was wiederumhandleNegotiationNeeded()triggert. Siehe dazu auch diese "Note" oben auf dieser Seite. - Bei PeerB wird nach einer kurzen Weile
forwardSDPMessageToRespectivePeer()inWebRTCService.tsaufgerufen, 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.
- Bei PeerA wird