Signatur
Beschreibung
Die Eigenschaft trackIdentifier gehört zum Wörterbuch RTCAudioSourceStats. Dieses Statistikobjekt liefert RTCPeerConnection.getStats() bzw. RTCRtpSender.getStats() mit type === "media-source" und kind === "audio". Es beschreibt einen Audio-Track, der an einen Sender angehängt ist, also z. B. das lokale Mikrofon.
Der Wert ist ein String, der genau dem id-Attribut des zugehörigen MediaStreamTrack entspricht. Damit lassen sich Kennzahlen aus dem Statistikbericht wie audioLevel, totalAudioEnergy oder echoReturnLoss eindeutig einem konkreten Track in der Anwendung zuordnen, etwa einem bestimmten Mikrofon, wenn mehrere Audioquellen gleichzeitig gesendet werden.
Typische Einsatzfälle sind Pegelanzeigen („Spricht der Nutzer gerade?“), Diagnose-Dashboards und das Aufspüren stummer oder falsch zugeordneter Mikrofone. Zu beachten ist, dass die id des Statistikobjekts selbst (stats.id) nicht die Track-ID ist. Für die Zuordnung ist ausschließlich trackIdentifier maßgeblich.
Beispiele
Audio-Quellstatistiken auslesen und Track-ID anzeigen
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
pc.addTrack(track, stream);
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === "media-source" && stats.kind === "audio") {
console.log("Track-ID:", stats.trackIdentifier);
console.log("Stimmt überein:", stats.trackIdentifier === track.id);
}
});
Pegel pro Mikrofon anhand von trackIdentifier zuordnen
// Liefert eine Map: Track-ID -> aktueller Audiopegel (0..1)
const getAudioLevels = async (pc) => {
const levels = new Map();
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === "media-source" && stats.kind === "audio") {
levels.set(stats.trackIdentifier, stats.audioLevel ?? 0);
}
}
return levels;
};
const intervalId = setInterval(async () => {
const levels = await getAudioLevels(pc);
for (const sender of pc.getSenders()) {
const t = sender.track;
if (t?.kind === "audio") {
const level = levels.get(t.id) ?? 0;
console.log(`${t.label}: ${(level * 100).toFixed(0)} %`);
}
}
}, 1000);
Statistik gezielt über den Sender abfragen
const sender = pc.getSenders().find((s) => s.track?.kind === "audio");
const report = await sender.getStats();
const source = [...report.values()].find(
(s) => s.type === "media-source" && s.trackIdentifier === sender.track.id
);
console.log(source ? `Energie: ${source.totalAudioEnergy}` : "Keine Quellstatistik gefunden");
// Wichtig · Fallstricke
- Browser-Kompatibilität:
RTCAudioSourceStatseinschließlichtrackIdentifierwird vor allem von Chromium-basierten Browsern unterstützt. In Firefox und Safari fehlenmedia-source-Einträge für Audio ganz oder teilweise. Prüfe deshalb immer, ob die Eigenschaft vorhanden ist, bevor du sie nutzt. - Nicht mit
stats.idverwechseln: Die ID des Statistikobjekts ist eine interne Kennung des Berichts und hat nichts mit der Track-ID zu tun. - Track-Austausch: Nach
RTCRtpSender.replaceTrack()entsteht ein neuer Quelleintrag mit anderertrackIdentifier. Zwischengespeicherte Zuordnungen müssen dann aktualisiert werden. - Nur Sendeseite: Der Wert beschreibt lokale Quell-Tracks. Für empfangene Audio-Tracks nutzt du
RTCInboundRtpStreamStats.trackIdentifier. - Datenschutz: Track-IDs sind zufällige UUIDs und enthalten keine Geräteinformationen. Trotzdem solltest du sie nicht unnötig an Server übertragen.