Skip to content

Commit 236f170

Browse files
authored
multi gateways and scalable egress sockets (#25)
* init multi-gateways * switch to node context * add update again * use double buffer in participant egress * refactor gateway and add demux * integrate demuxer * connected now * add probe and filter based on dtls handshake * format demo * integrate last demux version * revert demux
1 parent 72b8508 commit 236f170

File tree

21 files changed

+908
-522
lines changed

21 files changed

+908
-522
lines changed

Cargo.lock

Lines changed: 5 additions & 106 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/src/main.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let localStream: MediaStream | null = null;
1111
let sessionUrl: string | null = null;
1212

1313
window._injects = {
14-
audio: true
14+
audio: true,
1515
};
1616

1717
form.onsubmit = async (e) => {
@@ -24,7 +24,7 @@ form.onsubmit = async (e) => {
2424
toggleBtn.textContent = "Stop";
2525
try {
2626
await start(endpoint);
27-
} catch(e) {
27+
} catch (e) {
2828
stop();
2929
}
3030
}
@@ -34,14 +34,14 @@ async function start(endpoint: string) {
3434
pc = new RTCPeerConnection();
3535

3636
// WHIP: send-only transceivers
37-
const videoTrans = pc.addTransceiver("video", {
38-
direction: "sendonly",
37+
const videoTrans = pc.addTransceiver("video", {
38+
direction: "sendonly",
3939
// Define scalability layers (low, medium, high)
4040
sendEncodings: [
41-
{ rid: "q", scaleResolutionDownBy: 4, maxBitrate: 150_000 }, // quarter res, ~150kbps
42-
{ rid: "h", scaleResolutionDownBy: 2, maxBitrate: 500_000 }, // half res, ~500kbps
41+
{ rid: "q", scaleResolutionDownBy: 4, maxBitrate: 150_000 }, // quarter res, ~150kbps
42+
{ rid: "h", scaleResolutionDownBy: 2, maxBitrate: 500_000 }, // half res, ~500kbps
4343
{ rid: "f", scaleResolutionDownBy: 1, maxBitrate: 1_500_000 }, // full res, ~1.5Mbps
44-
]
44+
],
4545
});
4646
const audioTrans = pc.addTransceiver("audio", { direction: "sendonly" });
4747
localStream = await navigator.mediaDevices.getUserMedia({
@@ -65,15 +65,15 @@ async function start(endpoint: string) {
6565
e.track.onended = () => {
6666
console.log(`Remote track ended: ${e.track.kind}`);
6767
remoteVideo.srcObject = null;
68-
}
68+
};
6969
e.track.onmute = () => {
7070
console.log(`Remote track muted: ${e.track.kind}`);
7171
remoteVideo.srcObject = null;
72-
}
72+
};
7373
e.track.onunmute = () => {
7474
console.log(`Remote track unmuted: ${e.track.kind}`);
7575
remoteVideo.srcObject = remoteVideoStream;
76-
}
76+
};
7777
remoteVideoStream.addTrack(e.track);
7878
} else if (e.track.kind === "audio") {
7979
remoteAudioStream.addTrack(e.track);
@@ -103,7 +103,7 @@ async function stop() {
103103
}
104104

105105
pc?.close();
106-
localStream?.getTracks().forEach(track => track.stop());
106+
localStream?.getTracks().forEach((track) => track.stop());
107107
localVideo.srcObject = null;
108108
remoteVideo.srcObject = null;
109109

@@ -112,4 +112,3 @@ async function stop() {
112112
toggleBtn.textContent = "Start";
113113
statusEl.textContent = "Disconnected";
114114
}
115-

0 commit comments

Comments
 (0)