test_peerConnection_replaceTrack_camera.html (1557B)
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 10 <video id="video" width="160" height="120" autoplay></video> 11 12 <script type="application/javascript"> 13 createHTML({ 14 bug: "1709481", 15 title: "replaceTrack (null -> camera) test", 16 visible: true 17 }); 18 19 runNetworkTest(async () => { 20 // Make sure we use the fake video device, and not loopback 21 await pushPrefs( 22 ['media.video_loopback_dev', ''], 23 ['media.navigator.streams.fake', true]); 24 const pc1 = new RTCPeerConnection(), pc2 = new RTCPeerConnection(); 25 pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate); 26 pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate); 27 pc2.ontrack = ({track}) => video.srcObject = new MediaStream([track]); 28 pc1.addTransceiver("audio"); 29 const tc1 = pc1.addTransceiver("video"); 30 const stream = await navigator.mediaDevices.getUserMedia({video: true}); 31 const [track] = stream.getVideoTracks(); 32 await pc1.setLocalDescription(); 33 await pc2.setRemoteDescription(pc1.localDescription); 34 await pc2.setLocalDescription(); 35 await pc1.setRemoteDescription(pc2.localDescription); 36 await wait(100); 37 await tc1.sender.replaceTrack(track); 38 const h = new VideoStreamHelper(); 39 await h.checkVideoPlaying(video); 40 pc1.close(); 41 pc2.close(); 42 await SpecialPowers.popPrefEnv(); 43 }); 44 45 </script> 46 </pre> 47 </body> 48 </html>