Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.mid

RTCInboundRtpStreamStats.mid

Eigenschaft

Enthält die ausgehandelte Medien-ID (<code>mid</code>) des <code>RTCRtpTransceiver</code>, zu dem der eingehende RTP-Stream gehört.

seit JavaScript Chrome 115+, Firefox 115+, Safari 16.4+ (teilweise Kategorie: webapi

Signatur

RTCInboundRtpStreamStats.mid

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

Typ
string | undefined
Beschreibung
Die ausgehandelte Medien-ID als String (z. B. "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);
audio: mid=0, SSRC=1234567890 video: mid=1, SSRC=987654321

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');
Verlorene Pakete: 3

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

  • mid ist erst nach erfolgreicher SDP-Aushandlung (setRemoteDescription/setLocalDescription) gesetzt – vorher immer auf undefined prüfen.
  • Bei Simulcast oder mehreren SSRCs pro Transceiver können mehrere inbound-rtp-Einträge dieselbe mid tragen; zur eindeutigen Unterscheidung zusätzlich ssrc verwenden.
  • Die mid ist 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 trackIdentifier bzw. receiver.track.id zuordnen.