tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RTCEncodedAudioFrame-send-incoming.https.html (2638B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>RTCEncodedAudioFrame can be cloned and distributed</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src=/resources/testdriver.js></script>
      7 <script src=/resources/testdriver-vendor.js></script>
      8 <script src='../../mediacapture-streams/permission-helper.js'></script>
      9 <script src="../../webrtc/RTCPeerConnection-helper.js"></script>
     10 <script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script>
     11 
     12 <script>
     13 "use strict";
     14 promise_test(async t => {
     15  const caller1 = new RTCPeerConnection();
     16  t.add_cleanup(() => caller1.close());
     17  const callee1 = new RTCPeerConnection({encodedInsertableStreams:true});
     18  t.add_cleanup(() => callee1.close());
     19  await setMediaPermission("granted", ["microphone"]);
     20  const inputStream = await navigator.mediaDevices.getUserMedia({audio:true});
     21  const inputTrack = inputStream.getAudioTracks()[0];
     22  t.add_cleanup(() => inputTrack.stop());
     23  caller1.addTrack(inputTrack)
     24  exchangeIceCandidates(caller1, callee1);
     25 
     26  const caller2 = new RTCPeerConnection({encodedInsertableStreams:true});
     27  t.add_cleanup(() => caller2.close());
     28  const callee2 = new RTCPeerConnection({encodedInsertableStreams:true});
     29  t.add_cleanup(() => callee2.close());
     30  const sender2 = caller2.addTransceiver("audio").sender;
     31  const writer2 = sender2.createEncodedStreams().writable.getWriter();
     32  sender2.replaceTrack(new MediaStreamTrackGenerator({ kind: 'audio' }));
     33  exchangeIceCandidates(caller2, callee2);
     34 
     35  const IncomingframesSentAndReceivedCorrectly = new Promise((resolve, reject) => {
     36    // Write the received incoming frames on callee1 to caller2.
     37    callee1.ontrack = async e => {
     38      const receiverStreams = e.receiver.createEncodedStreams();
     39      const receiverReader = receiverStreams.readable.getReader();
     40      const result = await receiverReader.read();
     41      const original = result.value;
     42      await writer2.write(original);
     43      resolve();
     44    }
     45 
     46        // callee2 receives frames over the PC from caller2.
     47    callee2.ontrack = async e => {
     48      const receiverStreams = e.receiver.createEncodedStreams();
     49      const receiverReader = receiverStreams.readable.getReader();
     50      const receiverWriter = receiverStreams.writable.getWriter();
     51      const result = await receiverReader.read();
     52      receiverWriter.write(result.value);
     53      resolve();
     54    }
     55 
     56  });
     57 
     58  await exchangeOfferAnswer(caller1, callee1);
     59  await exchangeOfferAnswer(caller2, callee2);
     60 
     61  return IncomingframesSentAndReceivedCorrectly;
     62 }, "Send endoded incoming frame");
     63 </script>