feat: Windows-Audiogeraete-Erkennung reparieren - Dummy-PeerConnection weckt das Audio-Device-Modul (M3)
This commit is contained in:
@@ -35,12 +35,30 @@ class _VoiceSectionState extends ConsumerState<_VoiceSection> {
|
||||
} catch (_) {
|
||||
devices = [];
|
||||
}
|
||||
// Windows (und teils Android) liefert eine LEERE Liste ohne Fehler,
|
||||
// solange in diesem Prozess noch nie ein Media-Stream geöffnet wurde.
|
||||
// Deshalb nicht nur bei Exception, sondern auch bei leerer Liste einmal
|
||||
// kurz getUserMedia anfordern und erneut enumerieren — und zwar SOLANGE
|
||||
// der Stream noch offen ist (nach stop() melden manche Systeme wieder 0).
|
||||
final hasAudioInput =
|
||||
// Windows: die Geräteliste kommt aus dem Audio-Device-Module der
|
||||
// libwebrtc.dll, und das wird erst initialisiert, wenn irgendeine
|
||||
// PeerConnection existiert (webrtc-sdk/libwebrtc Issue #141, Fix #142
|
||||
// noch in keinem Binary-Release – Diagnose siehe tool/device_probe.dart).
|
||||
// Ohne laufenden Call ist die Liste deshalb IMMER leer. Workaround:
|
||||
// kurz eine Dummy-PeerConnection anlegen (kein Mikrofonzugriff nötig),
|
||||
// enumerieren, wieder schließen.
|
||||
var hasAudioInput =
|
||||
devices.any((d) => d.kind?.toLowerCase() == 'audioinput');
|
||||
if (devices.isEmpty || !hasAudioInput) {
|
||||
RTCPeerConnection? admWakeup;
|
||||
try {
|
||||
admWakeup = await createPeerConnection({});
|
||||
devices = await navigator.mediaDevices.enumerateDevices();
|
||||
} catch (_) {
|
||||
// Fallback unten übernimmt.
|
||||
} finally {
|
||||
await admWakeup?.close();
|
||||
}
|
||||
}
|
||||
// Zweite Stufe (andere Systeme, z. B. teils Android): einmal kurz
|
||||
// getUserMedia anfordern und erneut enumerieren, SOLANGE der Stream
|
||||
// offen ist (nach stop() melden manche Systeme wieder 0).
|
||||
hasAudioInput =
|
||||
devices.any((d) => d.kind?.toLowerCase() == 'audioinput');
|
||||
if (devices.isEmpty || !hasAudioInput) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user