Signatur
Beschreibung
Die Eigenschaft ssrc eines RTCInboundRtpStreamStats-Objekts (Statistiktyp "inbound-rtp") enthält den Synchronization Source Identifier nach RFC 3550. Diese vorzeichenlose 32-Bit-Zahl steht im Header jedes RTP-Pakets und kennzeichnet genau einen Medienstrom innerhalb einer RTP-Sitzung, also z. B. die Audio- oder die Videospur eines entfernten Teilnehmers.
Sie brauchen den Wert vor allem, um Statistiken zuzuordnen. Zu jedem eingehenden Strom gibt es passende remote-outbound-rtp-Berichte mit derselben SSRC. Auch SSRC-Zeilen im SDP (a=ssrc:) oder Server-Logs eines SFU/MCU lassen sich darüber zuordnen. Außerdem können Sie mit der SSRC Messwerte wie packetsLost oder jitter über mehrere getStats()-Aufrufe hinweg einem bestimmten Strom zuordnen.
Den Wert lesen Sie aus dem RTCStatsReport, den RTCPeerConnection.getStats() oder RTCRtpReceiver.getStats() liefert. Die Eigenschaft ist nur lesbar und wird vom Browser gesetzt.
Rückgabewert
Beispiele
SSRC aller eingehenden Ströme auflisten
// pc ist eine verbundene RTCPeerConnection
const listInboundSsrcs = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'inbound-rtp') {
console.log(`${stats.kind}: SSRC ${stats.ssrc}`);
}
});
};
await listInboundSsrcs(pc);
Paketverlust pro SSRC über die Zeit verfolgen
const lastLost = new Map();
const checkLoss = async (pc) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type !== 'inbound-rtp') continue;
const prev = lastLost.get(stats.ssrc) ?? 0;
const delta = stats.packetsLost - prev;
lastLost.set(stats.ssrc, stats.packetsLost);
if (delta > 0) {
console.warn(`SSRC ${stats.ssrc}: ${delta} neue Pakete verloren`);
}
}
};
setInterval(() => checkLoss(pc), 2000);
Passenden remote-outbound-rtp-Bericht über die SSRC finden
const [receiver] = pc.getReceivers().filter((r) => r.track.kind === 'video');
const report = await receiver.getStats();
const stats = [...report.values()];
const inbound = stats.find((s) => s.type === 'inbound-rtp');
const remoteOut = stats.find(
(s) => s.type === 'remote-outbound-rtp' && s.ssrc === inbound?.ssrc
);
console.log('Empfangen:', inbound?.packetsReceived);
console.log('Laut Sender gesendet:', remoteOut?.packetsSent);
// Wichtig · Fallstricke
- Nicht dauerhaft: Die SSRC kann sich während einer Sitzung ändern, z. B. nach einer Neuverhandlung, bei Simulcast-Wechseln im SFU oder bei einer SSRC-Kollision. Speichern Sie sie nicht als feste ID eines Teilnehmers. Dafür eignen sich
trackIdentifierodermidbesser. - Unterschied zu
id: Die Eigenschaftiddes Statistikobjekts ist ein vom Browser erzeugter String und nicht die SSRC. Beide Werte haben unterschiedliche Formate und sollten nicht verwechselt werden. - Gültige Werte: Der Wert ist eine gewöhnliche JavaScript-
numberohne Vorzeichen. Behandeln Sie ihn nicht mit Bit-Operatoren wie|oder&, sonst können negative Zahlen entstehen. Nutzen Sie bei Bedarf>>> 0. - Verfügbarkeit: Ein
inbound-rtp-Eintrag entsteht erst, wenn tatsächlich RTP-Pakete eingetroffen sind. Direkt nach dem Verbindungsaufbau kann er noch fehlen. - Kompatibilität: Wird von Chrome, Edge, Firefox und Safari unterstützt. Ältere Chrome-Versionen haben mit dem alten, callbackbasierten
getStats()die SSRC als String geliefert. Die heutige Promise-Variante liefert eine Zahl.