JSFiddle - React, Tailwind, and code Playground

by mickel8

JavaScript

async function run() {
  pc1 = new RTCPeerConnection();
  pc2 = new RTCPeerConnection();

  tr1 = pc1.addTransceiver("audio");
  tr2 = pc1.addTransceiver("video");

  offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  await pc2.setRemoteDescription(offer);
  answer = await pc2.createAnswer();
  await pc2.setLocalDescription(answer);
  await pc1.setRemoteDescription(answer);

  tr1.stop();
  tr2.stop();

  offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  await pc2.setRemoteDescription(offer);
  answer = await pc2.createAnswer();
  await pc2.setLocalDescription(answer);
  await pc1.setRemoteDescription(answer);

  // negotiate once again even though negotiation is not needed
  offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);

  // observe that after setting remote offer with unused m-lines,
  // stopped transceivers are created...
  await pc2.setRemoteDescription(offer);
  console.log(pc2.getTransceivers());

  answer = await pc2.createAnswer();
  // ...and removed 
  await pc2.setLocalDescription(answer);
  console.log(pc2.getTransceivers());

  await pc1.setRemoteDescription(answer);
};

run();