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...