Start · Sprachen · JavaScript · Referenz · RTCAudioSourceStats.id

RTCAudioSourceStats.id

Eigenschaft

Ein String, der das Statistik-Objekt vom Typ <code>media-source</code> (Audioquelle) innerhalb eines <code>RTCStatsReport</code> eindeutig kennzeichnet.

seit JavaScript Chrome 108+, Edge 108+, Safari 17+ (Firefox: RTCAu Kategorie: webapi

Signatur

RTCAudioSourceStats.id

Beschreibung

Die schreibgeschützte Eigenschaft id des Wörterbuchs RTCAudioSourceStats enthält einen String. Er kennzeichnet die Audioquelle – also den lokalen MediaStreamTrack, der an einen RTCRtpSender angehängt ist –, zu der dieses Statistik-Objekt gehört. Die ID dient zugleich als Schlüssel in der Map-artigen Struktur RTCStatsReport.

Im Alltag braucht man die id vor allem, um Statistiken miteinander zu verknüpfen. Ein outbound-rtp-Eintrag (RTCOutboundRtpStreamStats) verweist über seine Eigenschaft mediaSourceId auf die id des passenden media-source-Eintrags. So lassen sich zum Beispiel Eingangspegel (audioLevel) und gesendete Bytes einem Stream zuordnen.

Die ID bleibt über mehrere Aufrufe von getStats() hinweg für dieselbe Quelle stabil. Deshalb eignet sie sich, um Messwerte über die Zeit zu verfolgen, etwa zur Berechnung von Deltas zwischen zwei Abfragen. Das Format ist dagegen nicht festgelegt und hängt vom Browser ab. Man darf die ID also nur als undurchsichtigen Bezeichner verwenden.

Rückgabewert

Typ
string
Beschreibung
Eine eindeutige Kennung des Statistik-Objekts innerhalb des RTCStatsReport, z. B. "SA1" in Chrome. Das Format ist browserabhängig.

Beispiele

IDs aller Audioquellen auslesen

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const pc = new RTCPeerConnection();
stream.getTracks().forEach((track) => pc.addTrack(track, stream));

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'media-source' && stats.kind === 'audio') {
    console.log('Audioquelle:', stats.id, 'Pegel:', stats.audioLevel);
  }
});
Audioquelle: SA1 Pegel: 0.0123

outbound-rtp über mediaSourceId mit der Audioquelle verknüpfen

const logAudioSend = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'outbound-rtp' && stats.kind === 'audio') {
      // Direkter Zugriff über die id als Map-Schlüssel
      const source = report.get(stats.mediaSourceId);
      console.log(`Quelle ${source?.id}: Pegel ${source?.audioLevel}, gesendet ${stats.bytesSent} Bytes`);
    }
  }
};

await logAudioSend(pc);
Quelle SA1: Pegel 0.02, gesendet 48213 Bytes

Energie-Deltas pro Quelle über die Zeit verfolgen

const previous = new Map();

setInterval(async () => {
  const report = await pc.getStats();
  report.forEach((s) => {
    if (s.type !== 'media-source' || s.kind !== 'audio') return;
    const prev = previous.get(s.id);
    if (prev) {
      const delta = s.totalAudioEnergy - prev.totalAudioEnergy;
      console.log(`${s.id}: Energie-Zuwachs ${delta.toFixed(4)}`);
    }
    previous.set(s.id, s);
  });
}, 1000);
SA1: Energie-Zuwachs 0.0031

// Wichtig · Fallstricke

  • Das Format der ID ist nicht standardisiert. Nicht parsen und nicht davon ausgehen, dass sie zwischen Browsern oder Sitzungen gleich ist.
  • Die ID ist nur innerhalb derselben RTCPeerConnection eindeutig. Wer mehrere Verbindungen überwacht, sollte sie zusätzlich nach Verbindung trennen.
  • Einträge vom Typ media-source gibt es nur für lokale Tracks, die an einen Sender angehängt sind. Für empfangene Audiodaten nutzt man inbound-rtp.
  • Kompatibilität: Chromium-Browser und Safari liefern RTCAudioSourceStats. Firefox kennt diesen Statistiktyp derzeit nicht. Daher vor dem Zugriff immer stats.type und stats.kind prüfen.
  • Die Eigenschaft ist schreibgeschützt. Die Statistik-Objekte sind Momentaufnahmen und werden nicht automatisch aktualisiert.