async WebRTC minimal bad isRemote
by jib1
HTML
<div id="div"></div><br><div id="statsdiv"></div>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script src="https://jan-ivar.github.io/blacksilence/blacksilence.js"></script>
JavaScript
// This is a BAD example! Don't use isRemote, as it will break soon!
let log = msg => div.innerHTML += msg + "<br>";
let pc1 = new RTCPeerConnection(), pc2 = new RTCPeerConnection();
async function showStats(pc) {
try {
await new Promise(resolve => pc.oniceconnectionstatechange =
() => pc.iceConnectionState == "connected" && resolve());
while (true) {
let html = "", stats = await pc.getStats();
for (let stat of stats.values()) {
switch (stat.type) {
case "outbound-rtp": {
if (stat.isRemote) html += "Remote ";
html += dumpOutbound(stat) + "<br>";
break;
}
case "inbound-rtp": {
if (stat.isRemote) html += "Remote ";
html += dumpInbound(stat) + "<br>";
break;
}
}
}
update(statsdiv, `<small>${html}</small>`);
await wait(1000);
}
} catch (e) {
log(e);
}
}
pc1.addTrack(black(), new MediaStream());
showStats(pc1);
var mute = () => video1.srcObject.getTracks().forEach(t => t.enabled = !t.enabled);
var update = (div, msg) => div.innerHTML = msg;
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
let mb = bytes => (bytes/1024000).toFixed(2);
let dumpHeader = o => `${o.type} ${o.mediaType} ${new Date(o.timestamp).toTimeString()}<br>SSRC: ${o.ssrc} `;
var dumpOutbound = o => dumpHeader(o) + `Sent: ${o.packetsSent} packets (${mb(o.bytesSent)} MB)<br>Frames encoded: ${o.framesEncoded} Dropped frames: ${o.droppedFrames}<br>`;
var dumpInbound = o => dumpHeader(o) + `Received: ${o.packetsReceived} packets (${mb(o.bytesReceived)} MB) Lost: ${o.packetsLost}<br>Discarded packets: ${o.discardedPackets} Jitter: ${o.jitter}<br>`;
pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate);
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate);
pc1.onnegotiationneeded = async e => {
await pc1.setLocalDescription(await pc1.createOffer());
await...