test_peerConnection_replaceNullTrackThenRenegotiateAudio.html (2035B)
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 <body> 7 <pre id="test"> 8 <script type="application/javascript"> 9 createHTML({ 10 bug: "1763832", 11 title: "Renegotiation (audio): Start with no track and recvonly, then replace and set direction to sendrecv, then renegotiate" 12 }); 13 14 runNetworkTest(async () => { 15 await pushPrefs( 16 ['media.audio_loopback_dev', ''], 17 ['media.navigator.streams.fake', true]); 18 const offerer = new RTCPeerConnection(); 19 const answerer = new RTCPeerConnection(); 20 const transceiverSend = offerer.addTransceiver('audio', {direction: 'recvonly'}); 21 22 const add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed); 23 offerer.onicecandidate = e => add(answerer, e.candidate, generateErrorCallback()); 24 answerer.onicecandidate = e => add(offerer, e.candidate, generateErrorCallback()); 25 26 await offerer.setLocalDescription(); 27 await answerer.setRemoteDescription(offerer.localDescription); 28 await answerer.setLocalDescription(); 29 await offerer.setRemoteDescription(answerer.localDescription); 30 31 // add audio with replaceTrack, set send bit, and renegotiate 32 const stream = await navigator.mediaDevices.getUserMedia({audio: true}); 33 const [track] = stream.getAudioTracks(); 34 transceiverSend.sender.replaceTrack(track); 35 transceiverSend.direction = "sendrecv"; 36 const remoteStreamAvailable = new Promise(r => { 37 answerer.ontrack = ({track}) => r(new MediaStream([track])); 38 }); 39 40 await offerer.setLocalDescription(); 41 await answerer.setRemoteDescription(offerer.localDescription); 42 await answerer.setLocalDescription(); 43 await offerer.setRemoteDescription(answerer.localDescription); 44 45 const remoteStream = await remoteStreamAvailable; 46 const h = new AudioStreamFlowingHelper(); 47 await h.checkAudioFlowing(remoteStream); 48 }); 49 50 </script> 51 </pre> 52 </body> 53 </html>