Merge branch 'fix/audio-input-auto-selection' into 'main'
chore: update audio device for call when input device changes. Closes famedly-web#587 See merge request famedly/company/frontend/famedlysdk!1144
This commit is contained in:
commit
1656c51f05
|
|
@ -20,6 +20,7 @@ import 'dart:async';
|
|||
import 'dart:core';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:webrtc_interface/webrtc_interface.dart';
|
||||
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
|
@ -329,6 +330,7 @@ class CallSession {
|
|||
bool waitForLocalAVStream = false;
|
||||
int toDeviceSeq = 0;
|
||||
int candidateSendTries = 0;
|
||||
bool get isGroupCall => groupCallId != null;
|
||||
|
||||
final CachedStreamController<CallSession> onCallStreamsChanged =
|
||||
CachedStreamController();
|
||||
|
|
@ -596,6 +598,22 @@ class CallSession {
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> updateAudioDevice([MediaStreamTrack? track]) async {
|
||||
final sender = usermediaSenders
|
||||
.firstWhereOrNull((element) => element.track!.kind == 'audio');
|
||||
await sender?.track?.stop();
|
||||
if (track != null) {
|
||||
await sender?.replaceTrack(track);
|
||||
} else {
|
||||
final stream =
|
||||
await voip.delegate.mediaDevices.getUserMedia({'audio': true});
|
||||
final audioTrack = stream.getAudioTracks().firstOrNull;
|
||||
if (audioTrack != null) {
|
||||
await sender?.replaceTrack(audioTrack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _updateRemoteSDPStreamMetadata(SDPStreamMetadata metadata) {
|
||||
remoteSDPStreamMetadata = metadata;
|
||||
remoteSDPStreamMetadata!.sdpStreamMetadatas
|
||||
|
|
|
|||
|
|
@ -394,6 +394,15 @@ class GroupCall {
|
|||
return newStream;
|
||||
}
|
||||
|
||||
Future<void> updateAudioDevice() async {
|
||||
final stream =
|
||||
await voip.delegate.mediaDevices.getUserMedia({'audio': true});
|
||||
final audioTrack = stream.getAudioTracks().first;
|
||||
for (final call in calls) {
|
||||
await call.updateAudioDevice(audioTrack);
|
||||
}
|
||||
}
|
||||
|
||||
void updateLocalUsermediaStream(WrappedMediaStream stream) {
|
||||
if (localUserMediaStream != null) {
|
||||
final oldStream = localUserMediaStream!.stream;
|
||||
|
|
|
|||
|
|
@ -129,6 +129,22 @@ class VoIP {
|
|||
break;
|
||||
}
|
||||
});
|
||||
|
||||
delegate.mediaDevices.ondevicechange = _onDeviceChange;
|
||||
}
|
||||
|
||||
Future<void> _onDeviceChange(dynamic _) async {
|
||||
Logs().v('[VOIP] _onDeviceChange');
|
||||
for (final call in calls.values) {
|
||||
if (call.state == CallState.kConnected && !call.isGroupCall) {
|
||||
await call.updateAudioDevice();
|
||||
}
|
||||
}
|
||||
for (final groupCall in groupCalls.values) {
|
||||
if (groupCall.state == GroupCallState.Entered) {
|
||||
await groupCall.updateAudioDevice();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onCallInvite(
|
||||
|
|
|
|||
Loading…
Reference in New Issue