Signatur
Beschreibung
Die Eigenschaft active gehört zum Statistik-Wörterbuch RTCOutboundRtpStreamStats. Dieses Objekt liefert RTCPeerConnection.getStats() bzw. RTCRtpSender.getStats() für jeden Eintrag mit type === "outbound-rtp". Der Wert zeigt, ob der zugehörige RTP-Stream laut Konfiguration senden soll.
Der Wert spiegelt das Feld active der passenden Kodierung in RTCRtpSender.getParameters().encodings wider. Setzt man eine Kodierung mit RTCRtpSender.setParameters() auf active: false, meldet die Statistik danach active: false. Das ist vor allem bei Simulcast praktisch: Jede Simulcast-Schicht (erkennbar an rid) erscheint als eigener outbound-rtp-Eintrag, und über active sieht man, welche Schichten gerade eingeschaltet sind.
active beschreibt nur die Konfiguration, nicht, ob tatsächlich Pakete fließen. Ein Stream kann aktiv sein und trotzdem nichts senden, etwa wenn die Bandbreitenschätzung eine Schicht abschaltet, der Track stummgeschaltet ist oder noch keine Verbindung besteht. Ob wirklich gesendet wird, zeigen erst die Veränderungen von packetsSent oder bytesSent zwischen zwei Messungen.
Rückgabewert
true, wenn der RTP-Stream zum Senden konfiguriert ist, false, wenn er deaktiviert wurde (z. B. über encodings[i].active = false). Die Eigenschaft ist schreibgeschützt und kann in Browsern ohne Unterstützung fehlen (undefined).Beispiele
Aktivitätsstatus aller ausgehenden Streams auslesen
// pc ist eine bestehende RTCPeerConnection
const logOutboundActive = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== "outbound-rtp") return;
console.log(
`${stats.kind} ssrc=${stats.ssrc} rid=${stats.rid ?? "-"} active=${stats.active}`
);
});
};
await logOutboundActive(pc);
Simulcast-Schicht abschalten und in den Statistiken prüfen
const sender = pc.getSenders().find((s) => s.track?.kind === "video");
// Höchste Schicht (rid "f") deaktivieren, z. B. um Bandbreite zu sparen
const params = sender.getParameters();
params.encodings = params.encodings.map((enc) =>
enc.rid === "f" ? { ...enc, active: false } : enc
);
await sender.setParameters(params);
// Kontrolle über die Statistik des Senders
const report = await sender.getStats();
for (const stats of report.values()) {
if (stats.type === "outbound-rtp") {
console.log(stats.rid, stats.active);
}
}
Konfiguration mit tatsächlichem Sendefluss vergleichen
// Erkennt Streams, die aktiv sein sollen, aber keine Pakete senden
const previous = new Map();
const checkStalledStreams = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== "outbound-rtp") return;
const last = previous.get(stats.id) ?? 0;
const delta = stats.packetsSent - last;
previous.set(stats.id, stats.packetsSent);
if (stats.active === true && delta === 0) {
console.warn(`Stream ${stats.rid ?? stats.ssrc} ist aktiv, sendet aber nicht`);
}
});
};
setInterval(() => checkStalledStreams(pc), 2000);
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Eigenschaft ist relativ neu und bisher vor allem in Chromium-basierten Browsern verfügbar. In anderen Browsern kann sie fehlen, dann ist der Wert
undefined. Prüfe deshalb mittypeof stats.active === "boolean"und greife sonst aufsender.getParameters().encodings[i].activezurück. - Konfiguration statt tatsächlicher Sendung:
active: trueheißt nicht, dass Daten fließen. Die Bandbreitenanpassung kann Simulcast-Schichten selbstständig pausieren; der Grund steht dann eventuell inqualityLimitationReason. Ob wirklich gesendet wird, zeigen nurpacketsSentbzw.bytesSentim Zeitverlauf. - Verzögerung: Nach
setParameters()kann es einen Moment dauern, bisgetStats()den neuen Wert meldet. Statistiken sind Momentaufnahmen und werden nicht live aktualisiert. - Deaktivierte Streams bleiben im Statistikbericht, ihre Zähler steigen aber nicht mehr. Filtere sie bei Bitraten-Berechnungen gezielt heraus.
- Das Statistik-Objekt ist eine Kopie. Wer
activedarauf ändert, beeinflusst den Stream nicht. Ändern lässt sich der Zustand nur überRTCRtpSender.setParameters().