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>