Signatur
Beschreibung
Die Eigenschaft mid eines RTCInboundRtpStreamStats-Objekts (Typ "inbound-rtp") ist ein String mit der Medien-ID, die beim SDP-Angebot und der Antwort zwischen lokalem und entferntem Peer ausgehandelt wurde. Sie entspricht dem Attribut a=mid: im SDP und dem Wert von RTCRtpTransceiver.mid.
Mit mid lassen sich Statistikeinträge aus RTCPeerConnection.getStats() eindeutig einem Transceiver und damit einem bestimmten Audio- oder Videotrack zuordnen. Das ist besonders nützlich, wenn mehrere Streams gleicher Art empfangen werden (zum Beispiel mehrere Videokacheln in einer Konferenz) und man Kennzahlen wie packetsLost, jitter oder framesPerSecond pro Stream darstellen will.
Die Eigenschaft ist schreibgeschützt und nur vorhanden, wenn der zugehörige Transceiver bereits eine ausgehandelte mid hat. Vor Abschluss der Aushandlung oder bei beendeten Transceivern kann sie fehlen (undefined).
Rückgabewert
"0", "1" oder "video"), oder undefined, wenn noch keine mid ausgehandelt wurde.Beispiele
mid aller eingehenden RTP-Streams auslesen
// pc ist eine bestehende, verbundene RTCPeerConnection
const logInboundMids = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'inbound-rtp') {
console.log(`${stats.kind}: mid=${stats.mid}, SSRC=${stats.ssrc}`);
}
});
};
await logInboundMids(pc);
Statistik einem Transceiver zuordnen
const statsForTransceiver = async (pc, transceiver) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'inbound-rtp' && stats.mid === transceiver.mid) {
return stats;
}
}
return null;
};
const [videoTransceiver] = pc.getTransceivers()
.filter((t) => t.receiver.track.kind === 'video');
const stats = await statsForTransceiver(pc, videoTransceiver);
console.log(stats ? `Verlorene Pakete: ${stats.packetsLost}` : 'Keine Statistik');
Empfangsqualität pro mid überwachen
const monitor = (pc, intervalMs = 2000) => {
const timer = setInterval(async () => {
const report = await pc.getStats();
const perMid = {};
report.forEach((s) => {
if (s.type === 'inbound-rtp' && s.mid !== undefined) {
perMid[s.mid] = { kind: s.kind, jitter: s.jitter, lost: s.packetsLost };
}
});
console.table(perMid);
}, intervalMs);
return () => clearInterval(timer);
};
const stopMonitoring = monitor(pc);
// später: stopMonitoring();
// Wichtig · Fallstricke
midist erst nach erfolgreicher SDP-Aushandlung (setRemoteDescription/setLocalDescription) gesetzt – vorher immer aufundefinedprüfen.- Bei Simulcast oder mehreren SSRCs pro Transceiver können mehrere
inbound-rtp-Einträge dieselbemidtragen; zur eindeutigen Unterscheidung zusätzlichssrcverwenden. - Die
midist ein frei wählbarer String und muss nicht numerisch sein – nicht als Zahl parsen oder als Array-Index verwenden. - Browser-Kompatibilität: Die Eigenschaft ist in aktuellen Chromium-Browsern und Firefox verfügbar; in älteren Versionen und teilweise in Safari fehlt sie. Als Rückfall kann man über
trackIdentifierbzw.receiver.track.idzuordnen.