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.
- 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.ts
setLocalStream() aufgerufen und somitpeer.start(stream);
. - Dadurch wird in
frontend\src\services\webrtc\PerfectPeer.ts
vor 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.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.
- Bei PeerA wird