"use strict"; async function setupLoopbackWithCodecAndGetReader(t, codec) { const caller = new RTCPeerConnection({encodedInsertableStreams:true}); t.add_cleanup(() => caller.close()); const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); await setMediaPermission("granted", ["camera"]); const stream = await navigator.mediaDevices.getUserMedia({video:true}); const videoTrack = stream.getVideoTracks()[0]; t.add_cleanup(() => videoTrack.stop()); const transceiver = caller.addTransceiver(videoTrack); const codecCapability = RTCRtpSender.getCapabilities('video').codecs.find(capability => { return capability.mimeType.includes(codec); }); assert_not_equals(codecCapability, undefined); transceiver.setCodecPreferences([codecCapability]); const senderStreams = transceiver.sender.createEncodedStreams(); exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); return senderStreams.readable.getReader(); }