Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.groupId

MediaTrackSupportedConstraints.groupId

Eigenschaft

Boolescher Wert, der angibt, ob der Browser die Einschränkung <code>groupId</code> unterstützt. Ist das der Fall, steht er im Objekt von <code>getSupportedConstraints()</code> auf <code>true</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.groupId

Beschreibung

Die schreibgeschützte Eigenschaft groupId gehört zum Wörterbuch MediaTrackSupportedConstraints. Dieses Objekt bekommt man von navigator.mediaDevices.getSupportedConstraints(). Unterstützt der Browser die Einschränkung groupId, enthält das Objekt die Eigenschaft mit dem Wert true. Fehlt die Unterstützung, fehlt auch die Eigenschaft. Den Wert false liefert die API an dieser Stelle normalerweise nicht.

Die Einschränkung groupId steht für eine Gerätegruppe. Geräte mit derselben groupId gehören zum selben physischen Gerät, zum Beispiel Mikrofon und Kamera einer Webcam oder Mikrofon und Lautsprecher eines Headsets. Mit groupId in den Einschränkungen von getUserMedia() kann man also passende Geräte zusammen auswählen.

Prüfen Sie diese Eigenschaft, bevor Sie groupId in einem Einschränkungsobjekt verwenden. Ohne Unterstützung ignoriert der Browser die Einschränkung einfach, und das Ergebnis ist ein anderes Gerät als gewünscht.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn der Browser die Einschränkung groupId unterstützt. Ohne Unterstützung fehlt die Eigenschaft, das Auslesen ergibt dann undefined.

Beispiele

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.groupId) {
  console.log('groupId wird unterstützt');
} else {
  console.log('groupId wird nicht unterstützt');
}
groupId wird unterstützt

Mikrofon passend zur gewählten Kamera anfordern

const startMatchingStream = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();

  // Zuerst die Kamera öffnen
  const videoStream = await navigator.mediaDevices.getUserMedia({ video: true });
  const [videoTrack] = videoStream.getVideoTracks();
  const { groupId } = videoTrack.getSettings();

  if (!supported.groupId || !groupId) {
    console.warn('groupId nicht verfügbar – normales Mikrofon wird verwendet');
    return navigator.mediaDevices.getUserMedia({ audio: true, video: true });
  }

  // Mikrofon aus derselben Gerätegruppe (z. B. dieselbe Webcam)
  const audioStream = await navigator.mediaDevices.getUserMedia({
    audio: { groupId: { exact: groupId } }
  });

  return new MediaStream([videoTrack, ...audioStream.getAudioTracks()]);
};

startMatchingStream()
  .then((stream) => console.log('Spuren:', stream.getTracks().map((t) => t.kind)))
  .catch((err) => console.error(err.name, err.message));
Spuren: ["video", "audio"]

Geräte nach Gruppe ordnen

const listGroups = async () => {
  if (!navigator.mediaDevices.getSupportedConstraints().groupId) return;

  const devices = await navigator.mediaDevices.enumerateDevices();
  const groups = Object.groupBy(devices, (d) => d.groupId || 'unbekannt');

  for (const [id, list] of Object.entries(groups)) {
    console.log(id.slice(0, 8), list.map((d) => `${d.kind}: ${d.label || '(ohne Label)'}`));
  }
};

listGroups();
3f9a1c2b ["audioinput: Headset-Mikrofon", "audiooutput: Headset-Lautsprecher"]

// Wichtig · Fallstricke

  • Fehlen statt false: Nicht unterstützte Einschränkungen tauchen im Objekt gar nicht auf. Prüfen Sie deshalb auf Wahrheitswert, also if (supported.groupId), und nicht mit === false.
  • Nur Unterstützung, kein Gerätewert: Die Eigenschaft enthält nie die eigentliche Gruppen-ID. Die bekommen Sie über MediaDeviceInfo.groupId oder MediaStreamTrack.getSettings().groupId.
  • Datenschutz: Gruppen-IDs gelten nur für den jeweiligen Ursprung (Origin) und können sich ändern, zum Beispiel nach dem Löschen von Cookies. Bevor der Nutzer getUserMedia() erlaubt hat, liefert enumerateDevices() oft leere IDs und Labels.
  • Sicherer Kontext: navigator.mediaDevices gibt es nur über HTTPS oder localhost.
  • Browserunterschiede: Welche Geräte zu einer Gruppe gehören, legt der Browser bzw. das Betriebssystem fest. Das kann sich je nach Plattform unterscheiden. Verwenden Sie exact, wenn die Gruppe unbedingt passen muss. Dann kann aber ein OverconstrainedError auftreten.