RTCPeerConnection-insertable-streams-video-frames.https.html (2695B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>RTCPeerConnection Insertable Streams - Video Frames</title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src=/resources/testdriver.js></script> 8 <script src=/resources/testdriver-vendor.js></script> 9 <script src='../../mediacapture-streams/permission-helper.js'></script> 10 <script src="../../webrtc/RTCPeerConnection-helper.js"></script> 11 <script src="./RTCPeerConnection-insertable-streams.js"></script> 12 </head> 13 <body> 14 <script> 15 promise_test(async t => { 16 const caller = new RTCPeerConnection({encodedInsertableStreams:true}); 17 t.add_cleanup(() => caller.close()); 18 const callee = new RTCPeerConnection({encodedInsertableStreams:true}); 19 t.add_cleanup(() => callee.close()); 20 21 await setMediaPermission("granted", ["camera"]); 22 const stream = await navigator.mediaDevices.getUserMedia({video:true}); 23 const track = stream.getTracks()[0]; 24 t.add_cleanup(() => track.stop()); 25 26 const sender = caller.addTrack(track) 27 const senderStreams = sender.createEncodedStreams(); 28 const senderReader = senderStreams.readable.getReader(); 29 const senderWriter = senderStreams.writable.getWriter(); 30 const numFramesToSend = 20; 31 32 const ontrackPromise = new Promise((resolve, reject) => { 33 callee.ontrack = async e => { 34 const receiverStreams = e.receiver.createEncodedStreams(); 35 const receiverReader = receiverStreams.readable.getReader(); 36 37 let numReceivedKeyFrames = 0; 38 let numReceivedDeltaFrames = 0; 39 for (let i = 0; i < numFramesToSend; i++) { 40 const result = await receiverReader.read(); 41 if (result.value.type == 'key') 42 numReceivedKeyFrames++; 43 else if (result.value.type == 'delta') 44 numReceivedDeltaFrames++; 45 46 if (numReceivedKeyFrames > 0 && numReceivedDeltaFrames > 0) 47 resolve(); 48 else if (numReceivedKeyFrames + numReceivedDeltaFrames >= numFramesToSend) 49 reject(); 50 } 51 } 52 }); 53 54 exchangeIceCandidates(caller, callee); 55 await exchangeOfferAnswer(caller, callee); 56 57 let numSentKeyFrames = 0; 58 let numSentDeltaFrames = 0; 59 // Pass frames as they come from the encoder. 60 for (let i = 0; i < numFramesToSend; i++) { 61 const result = await senderReader.read(); 62 verifyNonstandardAdditionalDataIfPresent(result.value); 63 if (result.value.type == 'key') { 64 numSentKeyFrames++; 65 } else { 66 numSentDeltaFrames++; 67 } 68 69 senderWriter.write(result.value); 70 } 71 72 assert_greater_than(numSentKeyFrames, 0); 73 assert_greater_than(numSentDeltaFrames, 0); 74 75 return ontrackPromise; 76 }, 'Key and Delta frames are sent and received'); 77 78 </script> 79 </body> 80 </html>