Start · Sprachen · JavaScript · Referenz · RTCCodecStats.id

RTCCodecStats.id

Eigenschaft

String, der das <code>RTCCodecStats</code>-Objekt innerhalb eines <code>RTCStatsReport</code> eindeutig bezeichnet und als Schlüssel für Querverweise dient.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC-St Kategorie: webapi

Signatur

RTCCodecStats.id

Beschreibung

Die Eigenschaft id eines RTCCodecStats-Objekts ist ein String, der dieses Statistikobjekt und damit den Codec, den es beschreibt, eindeutig bezeichnet. Wenn Sie RTCPeerConnection.getStats() aufrufen, erhalten Sie einen RTCStatsReport. Das ist eine Map-ähnliche Struktur, deren Schlüssel genau diese id-Werte sind.

Wichtig ist die id vor allem für Querverweise: Andere Statistikobjekte wie RTCInboundRtpStreamStats und RTCOutboundRtpStreamStats enthalten die Eigenschaft codecId. Deren Wert ist die id des passenden RTCCodecStats-Eintrags. So finden Sie heraus, welcher Codec (zum Beispiel video/VP8 oder audio/opus) für einen bestimmten RTP-Stream verwendet wird.

Der Wert ist innerhalb einer RTCPeerConnection stabil. Das heißt: Dasselbe überwachte Objekt hat in aufeinanderfolgenden Berichten dieselbe id. Deshalb können Sie Messwerte über die Zeit vergleichen. Das Format des Strings legt der Browser fest, zum Beispiel "COT01_111_minptime=10;useinbandfec=1" in Chrome. Behandeln Sie den Wert daher nur als undurchsichtigen Bezeichner und werten Sie ihn nicht inhaltlich aus.

Rückgabewert

Typ
string
Beschreibung
Eindeutiger Bezeichner des Statistikobjekts innerhalb des RTCStatsReport. Er entspricht dem Map-Schlüssel und wird von codecId anderer Statistikobjekte referenziert.

Beispiele

Alle Codec-Statistiken mit ihrer id auflisten

const listCodecs = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'codec') {
      console.log(stats.id, stats.mimeType, stats.payloadType);
    }
  });
};

// pc ist eine bereits verbundene RTCPeerConnection
await listCodecs(pc);
COT01_111_minptime=10;useinbandfec=1 audio/opus 111 COT01_96 video/VP8 96

Verwendeten Codec eines eingehenden Video-Streams ermitteln

const getInboundVideoCodec = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'inbound-rtp' && stats.kind === 'video' && stats.codecId) {
      // codecId verweist auf RTCCodecStats.id
      const codec = report.get(stats.codecId);
      return codec ? `${codec.mimeType} (id: ${codec.id})` : 'unbekannt';
    }
  }
  return 'kein Video-Stream';
};

console.log(await getInboundVideoCodec(pc));
video/VP8 (id: CIT01_96)

Codec-Wechsel über die Zeit erkennen

let lastCodecId = null;

const watchCodec = (pc, intervalMs = 2000) => setInterval(async () => {
  const report = await pc.getStats();
  const outbound = [...report.values()]
    .find((s) => s.type === 'outbound-rtp' && s.kind === 'video');
  if (!outbound?.codecId) return;

  if (outbound.codecId !== lastCodecId) {
    const codec = report.get(outbound.codecId);
    console.log(`Codec gewechselt: ${codec?.mimeType} [${codec?.id}]`);
    lastCodecId = outbound.codecId;
  }
}, intervalMs);

const timer = watchCodec(pc);
// später: clearInterval(timer);
Codec gewechselt: video/VP8 [COT01_96]

// Wichtig · Fallstricke

  • Nicht auswerten: Das Format der id ist nicht standardisiert und unterscheidet sich zwischen Browsern und Browserversionen. Lesen Sie Codec-Informationen deshalb nicht per String-Zerlegung aus der id heraus. Verwenden Sie stattdessen mimeType, payloadType, clockRate und sdpFmtpLine.
  • Nur so lange gültig wie die Verbindung: Die id ist nur innerhalb derselben RTCPeerConnection eindeutig. Speichern Sie sie nicht über Sitzungen hinweg und vergleichen Sie sie nicht zwischen verschiedenen Verbindungen.
  • Kann fehlen: Codec-Statistiken erscheinen erst im Bericht, wenn ein Transport den Codec tatsächlich verwendet. Vor dem Verbindungsaufbau oder bei inaktiven Transceivern gibt es unter Umständen keine type === 'codec'-Einträge. Prüfen Sie außerdem, ob codecId gesetzt ist, bevor Sie report.get() aufrufen.
  • Browser-Unterschiede: Die Eigenschaft id stammt aus dem Basis-Wörterbuch RTCStats und wird von allen modernen Browsern unterstützt. Wann und wie Codec-Statistiken im Bericht erscheinen, hat sich in älteren Firefox- und Safari-Versionen teilweise unterschieden.
  • Datenschutz: WebRTC-Statistiken lassen Rückschlüsse auf die Geräte- und Netzwerkumgebung zu. Übertragen Sie sie nur bewusst an Telemetrie-Server.