Signatur
Beschreibung
Die Eigenschaft id des Wörterbuchs RTCOutboundRtpStreamStats ist ein String, der das Objekt eindeutig identifiziert, dessen Statistiken dieser Bericht enthält. Bei outbound-rtp-Berichten ist das ein ausgehender RTP-Stream, also Audio- oder Videodaten, die ein RTCRtpSender an die Gegenstelle sendet.
Die id dient zugleich als Schlüssel im RTCStatsReport, den RTCPeerConnection.getStats() oder RTCRtpSender.getStats() liefert. Solange das überwachte Objekt besteht, bleibt die ID in allen Berichten gleich. Deshalb eignet sie sich gut, um Werte aus mehreren Abfragen einander zuzuordnen, etwa um die Bitrate aus der Differenz von bytesSent zwischen zwei Messzeitpunkten zu berechnen.
Andere Statistikobjekte verweisen über ihre ID auf diesen Stream. Umgekehrt verweist der outbound-rtp-Bericht über Eigenschaften wie codecId, transportId, mediaSourceId oder remoteId auf verwandte Berichte. Diese Verweise löst man mit report.get(id) auf.
Rückgabewert
RTCStatsReport.Beispiele
IDs aller ausgehenden RTP-Streams auflisten
// pc ist eine bestehende, verbundene RTCPeerConnection
const listOutboundIds = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'outbound-rtp') {
console.log(`${stats.kind}: ${stats.id}`);
}
});
};
await listOutboundIds(pc);
Sende-Bitrate über zwei Messungen hinweg berechnen
const previous = new Map();
const measureBitrate = async (pc) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type !== 'outbound-rtp') continue;
const prev = previous.get(stats.id); // gleiche id = gleicher Stream
if (prev) {
const bits = (stats.bytesSent - prev.bytesSent) * 8;
const seconds = (stats.timestamp - prev.timestamp) / 1000;
console.log(`${stats.id}: ${Math.round(bits / seconds / 1000)} kbit/s`);
}
previous.set(stats.id, stats);
}
};
setInterval(() => measureBitrate(pc), 1000);
Verknüpfte Berichte über IDs auflösen
const [sender] = pc.getSenders().filter((s) => s.track?.kind === 'video');
const report = await sender.getStats();
const outbound = [...report.values()].find((s) => s.type === 'outbound-rtp');
const codec = report.get(outbound.codecId);
console.log(report.get(outbound.id) === outbound);
console.log(codec?.mimeType);
// Wichtig · Fallstricke
- Das Format der ID ist nicht standardisiert und unterscheidet sich je nach Browser, z. B.
OT01V…in Chrome oder eine UUID-ähnliche Zeichenfolge in Firefox. Werten Sie den Inhalt nicht aus. Verwenden Sie die ID nur, um Berichte zu vergleichen oder nachzuschlagen. - Die ID gilt nur innerhalb derselben
RTCPeerConnectionund nur für die Lebensdauer des überwachten Objekts. Nach einer Neuverhandlung oder einem Aufruf vonreplaceTrack()kann ein Stream eine neue ID bekommen. Veraltete Einträge in eigenen Maps sollten Sie deshalb entfernen. - Bei Simulcast gibt es pro Layer einen eigenen
outbound-rtp-Bericht mit eigener ID. Zur Unterscheidung dient zusätzlichridbzw.ssrc. - Die ID ist nicht über Geräte hinweg gültig. Die Gegenstelle vergibt eigene IDs. Den passenden Bericht der Gegenstelle findet man über
remoteId, das auf einen lokalenremote-inbound-rtp-Bericht verweist. - Die Eigenschaft wird von
RTCStatsgeerbt und ist in allen modernen Browsern mit WebRTC-Unterstützung verfügbar.