tor-browser

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

RTCEncodedAudioFrame-audiolevel.html (2180B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>Audio Level in RTCEncodedAudioFrameMetadata</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 doWorkExpectingAudioLevel() {
     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 metadata = frameOrDone.value.getMetadata();
     22      if (!("audioLevel" in metadata)) {
     23        self.postMessage("No audioLevel");
     24        return;
     25      }
     26      if (!(metadata.audioLevel >= 0 && metadata.audioLevel <= 1)) {
     27        self.postMessage("Invalid audioLevel value");
     28        return;
     29      }
     30      if (metadata.senderCaptureTimeOffset != 0) {
     31        await writer.write(frameOrDone.value);
     32      }
     33    }
     34    self.postMessage("OK");
     35  };
     36 }
     37 
     38 promise_test(async t => {
     39  const worker = new Worker(`data:text/javascript,(${doWorkExpectingAudioLevel.toString()})()`);
     40  const workerPromise = new Promise(r => worker.onmessage = r);
     41  await initiateCall(
     42      t, /*streamOptions=*/{audio: true, video: false},
     43      /*enableAbsCaptureTime=*/false, worker, /*enableSenderTransform=*/false,
     44      /*enableReceiverTransform=*/true);
     45 
     46  const {data} = await workerPromise;
     47  assert_equals(data, "OK");
     48 }, 'audioLevel present in audio receiver');
     49 
     50 promise_test(async t => {
     51  const worker = new Worker(`data:text/javascript,(${doWorkExpectingAudioLevel.toString()})()`);
     52  const workerPromise = new Promise(r => worker.onmessage = r);
     53  await initiateCall(
     54      t, /*streamOptions=*/{audio: true, video: false},
     55      /*enableAbsCaptureTime=*/false, worker, /*enableSenderTransform=*/true,
     56      /*enableReceiverTransform=*/false);
     57 
     58  const {data} = await workerPromise;
     59  assert_equals(data, "OK");
     60 }, 'audioLevel present in audio sender');
     61 
     62 
     63 </script>