test_peerConnection_replaceVideoThenRenegotiate.html (2816B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <script type="application/javascript" src="pc.js"></script> 5 <script type="application/javascript" src="/tests/dom/canvas/test/captureStream_common.js"></script> 6 </head> 7 <body> 8 <pre id="test"> 9 <script type="application/javascript"> 10 createHTML({ 11 bug: "1017888", 12 title: "Renegotiation: replaceTrack followed by adding a second video stream" 13 }); 14 15 runNetworkTest(async (options) => { 16 await pushPrefs(['media.peerconnection.video.min_bitrate_estimate', 180*1000]); 17 // [TODO] re-enable HW decoder after bug 1526207 is fixed. 18 if (navigator.userAgent.includes("Android")) { 19 await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false], 20 ["media.webrtc.hw.h264.enabled", false]); 21 } 22 23 const test = new PeerConnectionTest(options); 24 test.setMediaConstraints([{video:true}], [{video:true}]); 25 const helper = new VideoStreamHelper(); 26 const emitter1 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.red, 27 CaptureStreamTestHelper.prototype.green); 28 const emitter2 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.blue, 29 CaptureStreamTestHelper.prototype.grey); 30 test.chain.replace("PC_LOCAL_GUM", [ 31 function PC_LOCAL_ADDTRACK(test) { 32 test.pcLocal.attachLocalStream(emitter1.stream()); 33 emitter1.start(); 34 }, 35 ]); 36 addRenegotiation(test.chain, 37 [ 38 function PC_LOCAL_REPLACE_VIDEO_TRACK_THEN_ADD_SECOND_STREAM(test) { 39 emitter1.stop(); 40 emitter2.start(); 41 const newstream = emitter2.stream(); 42 const newtrack = newstream.getVideoTracks()[0]; 43 var sender = test.pcLocal._pc.getSenders()[0]; 44 return test.pcLocal.senderReplaceTrack(sender, newtrack, newstream) 45 .then(() => { 46 test.setMediaConstraints([{video: true}, {video: true}], 47 [{video: true}]); 48 }); 49 }, 50 ], 51 [ 52 function PC_REMOTE_CHECK_ORIGINAL_TRACK_NOT_ENDED(test) { 53 is(test.pcRemote._pc.getTransceivers().length, 1, 54 "pcRemote should have one transceiver"); 55 const track = test.pcRemote._pc.getTransceivers()[0].receiver.track; 56 57 const vremote = test.pcRemote.remoteMediaElements.find( 58 elem => elem.id.includes(track.id)); 59 if (!vremote) { 60 return Promise.reject(new Error("Couldn't find video element")); 61 } 62 ok(!vremote.ended, "Original track should not have ended after renegotiation (replaceTrack is not signalled!)"); 63 return helper.checkVideoPlaying(vremote); 64 } 65 ] 66 ); 67 68 await test.run(); 69 }); 70 71 </script> 72 </pre> 73 </body> 74 </html>