JSFiddle - React, Tailwind, and code Playground
by ibcaliax
JavaScript
async function test() {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
const stream1 = await navigator.mediaDevices.getUserMedia(
{
audio: true,
video: true
});
const audioTrack1 = stream1.getAudioTracks()[0];
const videoTrack1 = stream1.getVideoTracks()[0];
const stream2 = await navigator.mediaDevices.getUserMedia(
{
audio: true,
video:
{
width: { ideal: 50, max: 100 },
height: { ideal: 50, max: 100 },
frameRate: { ideal: 5, max: 10 }
}
});
const audioTrack2 = stream2.getAudioTracks()[0];
const videoTrack2 = stream2.getVideoTracks()[0];
pc1.addEventListener('icecandidate', (event) => {
if (event.candidate)
pc2.addIceCandidate(event.candidate);
});
pc2.addEventListener('icecandidate', (event) => {
if (event.candidate)
pc1.addIceCandidate(event.candidate);
});
pc1.addTransceiver(
audioTrack1,
{
direction: 'sendonly',
streams: [ stream1 ]
});
pc1.addTransceiver(
videoTrack1,
{
direction: 'sendonly',
streams: [ stream1 ]
});
pc1.addTransceiver(
audioTrack2,
{
direction: 'sendonly',
streams: [ stream2 ]
});
pc1.addTransceiver(
videoTrack2,
{
direction: 'sendonly',
streams: [ stream2 ]
});
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
let mangledOfferSdp = pc1.localDescription.sdp;
// Let's remove a=ssrc lines in remote offer.
mangledOfferSdp = mangledOfferSdp.replace(/a=mid[^\r\n]+/g, 'a=THIS-WAS-MID');
// Let's remove a=mid lines in remote offer.
mangledOfferSdp = mangledOfferSdp.replace(/a=ssrc[^\r\n]+/g, 'a=THIS-WAS-SSRC');
console.warn('mangled remote SDP:\n', mangledOfferSdp);
await pc2.setRemoteDescription({ type: 'offer', sdp: mangledOfferSdp });
const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(pc2.localDescription);
const...