tor-browser

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

RTCEncodedAudioFrame-constructor.html (2636B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>Timestamps in RTCEncodedFrame metadata</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="/webrtc/RTCPeerConnection-helper.js"></script>
      7 <script src="RTCEncodedFrame-timestamps-helper.js"></script>
      8 <script>
      9 'use strict';
     10 
     11 function doWork() {
     12  onrtctransform = async e => {
     13    const reader = e.transformer.readable.getReader();
     14    const writer = e.transformer.writable.getWriter();
     15    for (let i = 0; i<10; i++) {
     16      const frameOrDone = await reader.read();
     17      if (frameOrDone.done) {
     18        self.postMessage("Unexpected end of stream");
     19        return;
     20      }
     21      const originalFrame = frameOrDone.value;
     22      const originalMetadata= originalFrame.getMetadata();
     23      const newFrame = new RTCEncodedAudioFrame(originalFrame, {metadata: originalMetadata});
     24      await writer.write(newFrame);
     25    }
     26    self.postMessage("OK");
     27  };
     28 }
     29 
     30 async function testAudioFrameConstructor(t, enableAbsCaptureTime, enableForSenderFrames) {
     31  const worker = new Worker(`data:text/javascript,(${doWork.toString()})()`);
     32  const workerPromise = new Promise((resolve, reject) => {
     33    worker.onmessage = t.step_func(message => {
     34      if (message.data == "OK") {
     35        resolve();
     36      } else {
     37        reject(message.data);
     38      }
     39    });
     40  });
     41 
     42  await initiateCall(
     43      t, /*streamOptions=*/{audio: true, video: false},
     44      /*enableAbsCaptureTime=*/enableAbsCaptureTime, worker, /*enableSenderTransform=*/enableForSenderFrames,
     45      /*enableReceiverTransform=*/!enableForSenderFrames);
     46 
     47  return workerPromise;
     48 }
     49 
     50 promise_test(async t => {
     51  return testAudioFrameConstructor(t, /*enableAbsCaptureTime=*/false, /*enableForSenderFrames=*/false)
     52 }, 'Constructing a new receiver audio frame explicitly using metadata from a previous frame works');
     53 
     54 promise_test(async t => {
     55  return testAudioFrameConstructor(t, /*enableAbsCaptureTime=*/false, /*enableForSenderFrames=*/true)
     56 }, 'Constructing a new sender audio frame explicitly using metadata from a previous frame works');
     57 
     58 promise_test(async t => {
     59  return testAudioFrameConstructor(t, /*enableAbsCaptureTime=*/true, /*enableForSenderFrames=*/false)
     60 }, 'Constructing a new receiver audio frame explicitly using metadata from a previous frame works, absCaptureTime extension enabled');
     61 
     62 promise_test(async t => {
     63  return testAudioFrameConstructor(t, /*enableAbsCaptureTime=*/true, /*enableForSenderFrames=*/true)
     64 }, 'Constructing a new sender audio frame explicitly using metadata from a previous frame works, absCaptureTime extension enabled');
     65 
     66 </script>