receiver-track-live.https.html (2389B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Remote tracks should not get ended except for stop/close</title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src=/resources/testdriver.js></script> 9 <script src=/resources/testdriver-vendor.js></script> 10 <script src='../mediacapture-streams/permission-helper.js'></script> 11 <script src="RTCPeerConnection-helper.js"></script> 12 </head> 13 <body> 14 <video id="video" controls autoplay playsinline></video> 15 <script> 16 let pc1, pc2; 17 let localTrack, remoteTrack; 18 promise_test(async (test) => { 19 await setMediaPermission("granted", ["microphone"]); 20 const localStream = await navigator.mediaDevices.getUserMedia({audio: true}); 21 localTrack = localStream.getAudioTracks()[0]; 22 23 pc1 = new RTCPeerConnection(); 24 pc1.addTrack(localTrack, localStream); 25 pc2 = new RTCPeerConnection(); 26 27 let trackPromise = new Promise(resolve => { 28 pc2.ontrack = e => resolve(e.track); 29 }); 30 31 exchangeIceCandidates(pc1, pc2); 32 await exchangeOfferAnswer(pc1, pc2); 33 34 remoteTrack = await trackPromise; 35 video.srcObject = new MediaStream([remoteTrack]); 36 await video.play(); 37 }, "Setup audio call"); 38 39 promise_test(async (test) => { 40 pc1.getTransceivers()[0].direction = "inactive"; 41 42 let offer = await pc1.createOffer(); 43 await pc1.setLocalDescription(offer); 44 45 // Let's remove ssrc lines 46 let sdpLines = offer.sdp.split("\r\n"); 47 offer.sdp = sdpLines.filter(line => line && !line.startsWith("a=ssrc")).join("\r\n") + "\r\n"; 48 49 await pc2.setRemoteDescription(offer); 50 let answer = await pc2.createAnswer(); 51 await pc2.setLocalDescription(answer); 52 await pc1.setRemoteDescription(answer); 53 54 assert_equals(remoteTrack.readyState, "live"); 55 }, "Inactivate the audio transceiver"); 56 57 promise_test(async (test) => { 58 pc1.getTransceivers()[0].direction = "sendonly"; 59 60 await exchangeOfferAnswer(pc1, pc2); 61 62 assert_equals(remoteTrack.readyState, "live"); 63 }, "Reactivate the audio transceiver"); 64 65 promise_test(async (test) => { 66 pc1.close(); 67 pc2.close(); 68 localTrack.stop(); 69 }, "Clean-up"); 70 </script> 71 </body> 72 </html>