Signatur
Beschreibung
Die Eigenschaft groupId des Wörterbuchs MediaTrackConstraints schränkt die Auswahl eines Eingabegeräts über seine Gruppenkennung ein. Mehrere Geräte haben dieselbe groupId, wenn sie zum selben physischen Gerät gehören – typisch ist ein Headset mit Mikrofon und Kopfhörer oder eine Webcam mit eingebautem Mikrofon.
Den Wert erhältst du von MediaDeviceInfo.groupId (über navigator.mediaDevices.enumerateDevices()) oder aus MediaStreamTrack.getSettings().groupId. Damit kannst du z. B. passend zur gewählten Kamera das zugehörige Mikrofon anfordern.
Als ConstrainDOMString kann der Wert sein:
- ein
stringoderstring[]– wird als ideal behandelt (Wunsch, kein Zwang), - ein Objekt
{ exact: ... }– verbindliche Vorgabe; ist sie nicht erfüllbar, schlägtgetUserMedia()mitOverconstrainedErrorfehl, - ein Objekt
{ ideal: ... }– ausdrücklicher Wunschwert.
Die Gruppenkennung ist pro Ursprung (Origin) und Browsersitzung spezifisch, um Fingerprinting zu erschweren. Du solltest sie daher nicht dauerhaft speichern und seitenübergreifend verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $groupId | string | string[] | { exact?: string | string[], ideal?: string | string[] } | Gewünschte oder verbindliche Gruppenkennung(en). Ein bloßer String gilt als ideal, exact erzwingt die Übereinstimmung. |
Rückgabewert
undefined, wenn keine Einschränkung für groupId angegeben wurde.Beispiele
Passendes Mikrofon zur gewählten Kamera anfordern
const startWithMatchingMic = async () => {
// Zuerst Kamera öffnen
const videoStream = await navigator.mediaDevices.getUserMedia({ video: true });
const { groupId } = videoStream.getVideoTracks()[0].getSettings();
// Mikrofon desselben physischen Geräts bevorzugen
const audioStream = await navigator.mediaDevices.getUserMedia({
audio: { groupId: { ideal: groupId } }
});
console.log('Kamera-Gruppe:', groupId);
console.log('Mikro-Gruppe:', audioStream.getAudioTracks()[0].getSettings().groupId);
};
startWithMatchingMic().catch(console.error);
Headset-Mikrofon verbindlich anfordern
const useHeadsetMic = async () => {
const devices = await navigator.mediaDevices.enumerateDevices();
const headsetOut = devices.find(
(d) => d.kind === 'audiooutput' && /headset/i.test(d.label)
);
if (!headsetOut) throw new Error('Kein Headset gefunden');
try {
const stream = await navigator.mediaDevices.getUserMedia({
audio: { groupId: { exact: headsetOut.groupId } }
});
console.log('Headset-Mikro aktiv:', stream.getAudioTracks()[0].label);
return stream;
} catch (err) {
if (err.name === 'OverconstrainedError') {
console.warn('Headset hat kein Mikrofon:', err.constraint);
}
throw err;
}
};
useHeadsetMic().catch(console.error);
Unterstützung prüfen und Einschränkung auslesen
const supported = navigator.mediaDevices.getSupportedConstraints();
console.log('groupId unterstützt:', Boolean(supported.groupId));
const constraints = { audio: { groupId: ['abc123', 'def456'] } };
console.log(constraints.audio.groupId);
// Wichtig · Fallstricke
- Labels und IDs erst nach Berechtigung: Vor einer erteilten Kamera-/Mikrofonfreigabe liefert
enumerateDevices()oft leerelabel- undgroupId-Werte. - Keine dauerhafte Kennung:
groupIdist pro Origin gebunden und kann sich zwischen Sitzungen ändern (z. B. im privaten Modus oder nach dem Löschen der Cookies). Zum Wiedererkennen besserdeviceIdmit Rückfallebene verwenden. exactvorsichtig einsetzen: Hat die Gruppe kein Gerät der angeforderten Art, wirftgetUserMedia()einenOverconstrainedError. Mitidealfällt der Browser auf ein anderes Gerät zurück.- Browser-Unterschiede: Die Zuordnung zu Gruppen übernimmt das Betriebssystem bzw. der Browser. Sie ist nicht immer zuverlässig, z. B. bei Bluetooth-Geräten oder in Safari.
- Nur in sicheren Kontexten (HTTPS) verfügbar, wie die gesamte
getUserMedia()-API.