From 8cd7546d2fcac4b0b9da6522bb9b5c66d4d9374a Mon Sep 17 00:00:00 2001 From: David Zhao Date: Wed, 4 Aug 2021 22:52:16 -0700 Subject: [PATCH] minor tweaks & cleanup --- lib/livekit_client.dart | 1 + lib/src/participant/local_participant.dart | 86 +++++++++++---------- lib/src/participant/participant.dart | 6 +- lib/src/track/remote_track_publication.dart | 3 + 4 files changed, 54 insertions(+), 42 deletions(-) diff --git a/lib/livekit_client.dart b/lib/livekit_client.dart index b6e3352..aaeefdb 100644 --- a/lib/livekit_client.dart +++ b/lib/livekit_client.dart @@ -9,6 +9,7 @@ export 'src/participant/remote_participant.dart'; export 'src/proto/livekit_models.pbenum.dart'; export 'src/proto/livekit_rtc.pbenum.dart'; export 'src/participant/local_participant.dart'; +export 'src/track/options.dart'; export 'src/track/track.dart'; export 'src/track/video_track.dart'; export 'src/track/local_audio_track.dart'; diff --git a/lib/src/participant/local_participant.dart b/lib/src/participant/local_participant.dart index 64f4fc8..3e64cdf 100644 --- a/lib/src/participant/local_participant.dart +++ b/lib/src/participant/local_participant.dart @@ -38,58 +38,66 @@ class LocalParticipant extends Participant { Future publishAudioTrack(LocalAudioTrack track) async { if (audioTracks.values.any( (element) => element.track?.mediaTrack.id == track.mediaTrack.id)) { - throw new TrackPublishError('track already exists'); + return Future.error(TrackPublishError('track already exists')); } - var trackInfo = await _engine.addTrack( - cid: track.getCid(), name: track.name, kind: track.kind); - var stream = await getMediaStream(); - var transceiverInit = new RTCRtpTransceiverInit( - direction: TransceiverDirection.SendOnly, - streams: [stream], - ); - track.transceiver = await _engine.publisher?.pc.addTransceiver( - track: track.mediaTrack, - kind: track.mediaType, - init: transceiverInit, - ); + try { + var trackInfo = await _engine.addTrack( + cid: track.getCid(), name: track.name, kind: track.kind); + var stream = await getMediaStream(); + var transceiverInit = new RTCRtpTransceiverInit( + direction: TransceiverDirection.SendOnly, + streams: [stream], + ); + track.transceiver = await _engine.publisher?.pc.addTransceiver( + track: track.mediaTrack, + kind: track.mediaType, + init: transceiverInit, + ); - var pub = new LocalTrackPublication(trackInfo, track, this); - addTrackPublication(pub); - notifyListeners(); + var pub = new LocalTrackPublication(trackInfo, track, this); + addTrackPublication(pub); + notifyListeners(); - return pub; + return pub; + } catch (e) { + return Future.error(e); + } } /// publish a video track to the room Future publishVideoTrack(LocalVideoTrack track) async { if (audioTracks.values.any( (element) => element.track?.mediaTrack.id == track.mediaTrack.id)) { - throw new TrackPublishError('track already exists'); + return Future.error(TrackPublishError('track already exists')); } - var trackInfo = await _engine.addTrack( - cid: track.getCid(), name: track.name, kind: track.kind); - var stream = await getMediaStream(); - if (stream == null) { - return Future.error(TrackPublishError()); + try { + var trackInfo = await _engine.addTrack( + cid: track.getCid(), name: track.name, kind: track.kind); + var stream = await getMediaStream(); + if (stream == null) { + return Future.error(TrackPublishError()); + } + var transceiverInit = new RTCRtpTransceiverInit( + direction: TransceiverDirection.SendOnly, + streams: [stream], + ); + // TODO: video encodings and simulcast + track.transceiver = await _engine.publisher?.pc.addTransceiver( + track: track.mediaTrack, + kind: track.mediaType, + init: transceiverInit, + ); + + var pub = new LocalTrackPublication(trackInfo, track, this); + addTrackPublication(pub); + notifyListeners(); + + return pub; + } catch (e) { + return Future.error(e); } - var transceiverInit = new RTCRtpTransceiverInit( - direction: TransceiverDirection.SendOnly, - streams: [stream], - ); - // TODO: video encodings and simulcast - track.transceiver = await _engine.publisher?.pc.addTransceiver( - track: track.mediaTrack, - kind: track.mediaType, - init: transceiverInit, - ); - - var pub = new LocalTrackPublication(trackInfo, track, this); - addTrackPublication(pub); - notifyListeners(); - - return pub; } unpublishTrack(Track track) { diff --git a/lib/src/participant/participant.dart b/lib/src/participant/participant.dart index fdba451..023fc0f 100644 --- a/lib/src/participant/participant.dart +++ b/lib/src/participant/participant.dart @@ -65,7 +65,7 @@ class Participant extends ChangeNotifier { DateTime get joinedAt { var pi = _participantInfo; if (pi != null) { - return DateTime.fromMillisecondsSinceEpoch((pi.joinedAt as int) * 1000, + return DateTime.fromMillisecondsSinceEpoch(pi.joinedAt.toInt() * 1000, isUtc: true); } return DateTime.now(); @@ -82,9 +82,9 @@ class Participant extends ChangeNotifier { return audioTracks.values.first.muted; } - bool get hasAudio => audioTracks.length > 0; + bool get hasAudio => audioTracks.isNotEmpty; - bool get hasVideo => videoTracks.length > 0; + bool get hasVideo => videoTracks.isNotEmpty; /// tracks that are subscribed to List get subscribedTracks { diff --git a/lib/src/track/remote_track_publication.dart b/lib/src/track/remote_track_publication.dart index ce18436..97bf2bd 100644 --- a/lib/src/track/remote_track_publication.dart +++ b/lib/src/track/remote_track_publication.dart @@ -12,12 +12,14 @@ class RemoteTrackPublication extends TrackPublication { VideoQuality get videoQuality => _videoQuality; set videoQuality(VideoQuality val) { + if (val == _videoQuality) return; _videoQuality = val; _sendUpdateTrackSettings(); } bool get enabled => !_disabled; set enabled(bool val) { + if (_disabled == !val) return; _disabled = !val; _sendUpdateTrackSettings(); } @@ -30,6 +32,7 @@ class RemoteTrackPublication extends TrackPublication { } set subscribed(bool val) { + if (_unsubscribed == !val) return; _unsubscribed = !val; _sendUpdateTrackSettings(); }