Skip to content

Instantly share code, notes, and snippets.

@hissinger
Last active April 11, 2022 18:03
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hissinger/7dbd1fc2ddfc7a8df9a7094c1dc15bc5 to your computer and use it in GitHub Desktop.
Save hissinger/7dbd1fc2ddfc7a8df9a7094c1dc15bc5 to your computer and use it in GitHub Desktop.
webrtc simulcast example
document.getElementById("btn").onclick = async () => {
await run();
}
async function run() {
let stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
/* sender */
let sender = new RTCPeerConnection();
sender.onicecandidate = e => receiver.addIceCandidate(e.candidate);
sender.addTransceiver(stream.getVideoTracks()[0], {
direction: "sendonly",
streams: [stream],
sendEncodings: [
{ rid: "h", maxBitrate: 1200 * 1024 },
{ rid: "m", maxBitrate: 600 * 1024, scaleResolutionDownBy: 2 },
{ rid: "l", maxBitrate: 300 * 1024, scaleResolutionDownBy: 4 }
]
});
/* receiver */
let receiver = new RTCPeerConnection();
receiver.onicecandidate = e => sender.addIceCandidate(e.candidate);
receiver.ontrack = e => document.getElementById("video").srcObject = e.streams[0];
let offer = await sender.createOffer();
await sender.setLocalDescription(offer);
await receiver.setRemoteDescription(offer);
let answer = await receiver.createAnswer();
await receiver.setLocalDescription(answer);
await sender.setRemoteDescription(answer);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment