feat: web/native device consistency management (#243)

* fix: Force audio settings to be consistent.

* chore: applyAudioSettings for onUnpublish.

* revert audio output select for web.

* add RoomHardwareManagementMethods to Room.

* update.

* fix analyze.

* update.

* update.

* chore: Reset sinkId for web when remoteTrack replays.

* rename setAudioOutput to setSinkId for flutter web.

* chore: Make sure AudioElement has `setSinkId` method.
This commit is contained in:
CloudWebRTC
2023-03-07 17:54:06 +08:00
committed by GitHub
parent 70e6589981
commit db2e25d424
12 changed files with 275 additions and 136 deletions
+13
View File
@@ -8,6 +8,8 @@ import '../extensions.dart';
import '../logger.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../publication/remote.dart';
import '../support/platform.dart';
import '../track/options.dart';
import '../track/remote/audio.dart';
import '../track/remote/remote.dart';
import '../track/remote/video.dart';
@@ -75,6 +77,7 @@ class RemoteParticipant extends Participant<RemoteTrackPublication> {
rtc.MediaStream stream,
String trackSid, {
rtc.RTCRtpReceiver? receiver,
AudioOutputOptions audioOutputOptions = const AudioOutputOptions(),
}) async {
logger.fine('addSubscribedMediaTrack()');
@@ -123,6 +126,16 @@ class RemoteParticipant extends Participant<RemoteTrackPublication> {
}
await track.start();
/// Apply audio output selection for the web.
if (pub.kind == lk_models.TrackType.AUDIO &&
lkPlatformIs(PlatformType.web)) {
if (audioOutputOptions.deviceId != null) {
await (track as RemoteAudioTrack)
.setSinkId(audioOutputOptions.deviceId!);
}
}
await pub.updateTrack(track);
await pub.updateSubscriptionAllowed(true);
addTrackPublication(pub);