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>