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:core';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
import 'package:webrtc_interface/webrtc_interface.dart';
|
import 'package:webrtc_interface/webrtc_interface.dart';
|
||||||
|
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
@ -329,6 +330,7 @@ class CallSession {
|
||||||
bool waitForLocalAVStream = false;
|
bool waitForLocalAVStream = false;
|
||||||
int toDeviceSeq = 0;
|
int toDeviceSeq = 0;
|
||||||
int candidateSendTries = 0;
|
int candidateSendTries = 0;
|
||||||
|
bool get isGroupCall => groupCallId != null;
|
||||||
|
|
||||||
final CachedStreamController<CallSession> onCallStreamsChanged =
|
final CachedStreamController<CallSession> onCallStreamsChanged =
|
||||||
CachedStreamController();
|
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) {
|
void _updateRemoteSDPStreamMetadata(SDPStreamMetadata metadata) {
|
||||||
remoteSDPStreamMetadata = metadata;
|
remoteSDPStreamMetadata = metadata;
|
||||||
remoteSDPStreamMetadata!.sdpStreamMetadatas
|
remoteSDPStreamMetadata!.sdpStreamMetadatas
|
||||||
|
|
|
||||||
|
|
@ -394,6 +394,15 @@ class GroupCall {
|
||||||
return newStream;
|
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) {
|
void updateLocalUsermediaStream(WrappedMediaStream stream) {
|
||||||
if (localUserMediaStream != null) {
|
if (localUserMediaStream != null) {
|
||||||
final oldStream = localUserMediaStream!.stream;
|
final oldStream = localUserMediaStream!.stream;
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,22 @@ class VoIP {
|
||||||
break;
|
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(
|
Future<void> onCallInvite(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue