| <!doctype html> |
| <meta charset=utf-8> |
| <title>Audio Level in RTCEncodedAudioFrameMetadata</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/webrtc/RTCPeerConnection-helper.js"></script> |
| <script src="RTCEncodedFrame-timestamps-helper.js"></script> |
| <script> |
| 'use strict'; |
| |
| function doWorkExpectingAudioLevel() { |
| onrtctransform = async e => { |
| const reader = e.transformer.readable.getReader(); |
| const writer = e.transformer.writable.getWriter(); |
| for (let i = 0; i<10; i++) { |
| const frameOrDone = await reader.read(); |
| if (frameOrDone.done) { |
| self.postMessage("Unexpected end of stream"); |
| return; |
| } |
| const metadata = frameOrDone.value.getMetadata(); |
| if (metadata === undefined) { |
| self.postMessage("No audioLevel "); |
| return; |
| } |
| if (metadata.audioLevel < 0 || metadata.audioLevel > 1) { |
| self.postMessage("Invalid audioLevel value"); |
| return; |
| } |
| if (metadata.senderCaptureTimeOffset != 0) { |
| await writer.write(frameOrDone.value); |
| } |
| } |
| self.postMessage("OK"); |
| }; |
| } |
| |
| promise_test(async t => { |
| const worker = new Worker(`data:text/javascript,(${doWorkExpectingAudioLevel.toString()})()`); |
| const workerPromise = new Promise((resolve, reject) => { |
| worker.onmessage = t.step_func(message => { |
| if (message.data == "OK") { |
| resolve(); |
| } else { |
| reject(message.data); |
| } |
| }); |
| }); |
| |
| await initiateCall( |
| t, /*streamOptions=*/{audio: true, video: false}, |
| /*enableAbsCaptureTime=*/false, worker, /*enableSenderTransform=*/false, |
| /*enableReceiverTransform=*/true); |
| |
| return workerPromise; |
| }, 'audioLevel present in audio receiver'); |
| |
| promise_test(async t => { |
| const worker = new Worker(`data:text/javascript,(${doWorkExpectingAudioLevel.toString()})()`); |
| const workerPromise = new Promise((resolve, reject) => { |
| worker.onmessage = t.step_func(message => { |
| if (message.data == "OK") { |
| resolve(); |
| } else { |
| reject(message.data); |
| } |
| }); |
| }); |
| |
| await initiateCall( |
| t, /*streamOptions=*/{audio: true, video: false}, |
| /*enableAbsCaptureTime=*/false, worker, /*enableSenderTransform=*/true, |
| /*enableReceiverTransform=*/false); |
| |
| return workerPromise; |
| }, 'audioLevel present in audio sender'); |
| |
| |
| </script> |