Merge pull request #2 from TheNeikos/claude/fix-screenshare-stream-43ABB

Fix WebRTC stream handling and improve screen share delivery
This commit is contained in:
Marcel Müller 2026-02-09 10:19:18 +01:00 committed by GitHub
commit 8cc9ab0d46
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -714,9 +714,17 @@
console.log(`[${peerId.slice(0,8)}] Received track:`, event.track.kind); console.log(`[${peerId.slice(0,8)}] Received track:`, event.track.kind);
const peer = state.peers.get(peerId); const peer = state.peers.get(peerId);
if (peer) { if (peer) {
peer.stream = event.streams[0]; // Use the associated stream, or build one from the track
// (event.streams can be empty in some WebRTC edge cases)
if (event.streams[0]) {
peer.stream = event.streams[0];
} else if (!peer.stream) {
peer.stream = new MediaStream([event.track]);
} else {
peer.stream.addTrack(event.track);
}
updateUI(); updateUI();
// Auto-select if this is the first/only stream // Auto-select if this is the first/only stream
if (!state.selectedPeerId) { if (!state.selectedPeerId) {
selectPeer(peerId); selectPeer(peerId);
@ -913,13 +921,21 @@
stopSharing(); stopSharing();
}; };
// Notify server - other peers will send request_stream in response // Notify server
send({ send({
type: 'started_sharing', type: 'started_sharing',
peer_id: state.peerId, peer_id: state.peerId,
has_audio: stream.getAudioTracks().length > 0, has_audio: stream.getAudioTracks().length > 0,
}); });
// Proactively send offers to all connected peers so they
// receive the stream immediately. Without this, we rely on
// a request_stream round-trip that can silently fail because
// handleSignal is async but never awaited by ws.onmessage.
for (const [peerId] of state.peers) {
sendOfferTo(peerId);
}
updateUI(); updateUI();
} catch (err) { } catch (err) {
console.error('Error starting screen share:', err); console.error('Error starting screen share:', err);