minor tweaks & cleanup
This commit is contained in:
@@ -9,6 +9,7 @@ export 'src/participant/remote_participant.dart';
|
|||||||
export 'src/proto/livekit_models.pbenum.dart';
|
export 'src/proto/livekit_models.pbenum.dart';
|
||||||
export 'src/proto/livekit_rtc.pbenum.dart';
|
export 'src/proto/livekit_rtc.pbenum.dart';
|
||||||
export 'src/participant/local_participant.dart';
|
export 'src/participant/local_participant.dart';
|
||||||
|
export 'src/track/options.dart';
|
||||||
export 'src/track/track.dart';
|
export 'src/track/track.dart';
|
||||||
export 'src/track/video_track.dart';
|
export 'src/track/video_track.dart';
|
||||||
export 'src/track/local_audio_track.dart';
|
export 'src/track/local_audio_track.dart';
|
||||||
|
|||||||
@@ -38,58 +38,66 @@ class LocalParticipant extends Participant {
|
|||||||
Future<TrackPublication> publishAudioTrack(LocalAudioTrack track) async {
|
Future<TrackPublication> publishAudioTrack(LocalAudioTrack track) async {
|
||||||
if (audioTracks.values.any(
|
if (audioTracks.values.any(
|
||||||
(element) => element.track?.mediaTrack.id == track.mediaTrack.id)) {
|
(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(
|
try {
|
||||||
cid: track.getCid(), name: track.name, kind: track.kind);
|
var trackInfo = await _engine.addTrack(
|
||||||
var stream = await getMediaStream();
|
cid: track.getCid(), name: track.name, kind: track.kind);
|
||||||
var transceiverInit = new RTCRtpTransceiverInit(
|
var stream = await getMediaStream();
|
||||||
direction: TransceiverDirection.SendOnly,
|
var transceiverInit = new RTCRtpTransceiverInit(
|
||||||
streams: [stream],
|
direction: TransceiverDirection.SendOnly,
|
||||||
);
|
streams: [stream],
|
||||||
track.transceiver = await _engine.publisher?.pc.addTransceiver(
|
);
|
||||||
track: track.mediaTrack,
|
track.transceiver = await _engine.publisher?.pc.addTransceiver(
|
||||||
kind: track.mediaType,
|
track: track.mediaTrack,
|
||||||
init: transceiverInit,
|
kind: track.mediaType,
|
||||||
);
|
init: transceiverInit,
|
||||||
|
);
|
||||||
|
|
||||||
var pub = new LocalTrackPublication(trackInfo, track, this);
|
var pub = new LocalTrackPublication(trackInfo, track, this);
|
||||||
addTrackPublication(pub);
|
addTrackPublication(pub);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
||||||
return pub;
|
return pub;
|
||||||
|
} catch (e) {
|
||||||
|
return Future.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// publish a video track to the room
|
/// publish a video track to the room
|
||||||
Future<TrackPublication> publishVideoTrack(LocalVideoTrack track) async {
|
Future<TrackPublication> publishVideoTrack(LocalVideoTrack track) async {
|
||||||
if (audioTracks.values.any(
|
if (audioTracks.values.any(
|
||||||
(element) => element.track?.mediaTrack.id == track.mediaTrack.id)) {
|
(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(
|
try {
|
||||||
cid: track.getCid(), name: track.name, kind: track.kind);
|
var trackInfo = await _engine.addTrack(
|
||||||
var stream = await getMediaStream();
|
cid: track.getCid(), name: track.name, kind: track.kind);
|
||||||
if (stream == null) {
|
var stream = await getMediaStream();
|
||||||
return Future.error(TrackPublishError());
|
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) {
|
unpublishTrack(Track track) {
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class Participant extends ChangeNotifier {
|
|||||||
DateTime get joinedAt {
|
DateTime get joinedAt {
|
||||||
var pi = _participantInfo;
|
var pi = _participantInfo;
|
||||||
if (pi != null) {
|
if (pi != null) {
|
||||||
return DateTime.fromMillisecondsSinceEpoch((pi.joinedAt as int) * 1000,
|
return DateTime.fromMillisecondsSinceEpoch(pi.joinedAt.toInt() * 1000,
|
||||||
isUtc: true);
|
isUtc: true);
|
||||||
}
|
}
|
||||||
return DateTime.now();
|
return DateTime.now();
|
||||||
@@ -82,9 +82,9 @@ class Participant extends ChangeNotifier {
|
|||||||
return audioTracks.values.first.muted;
|
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
|
/// tracks that are subscribed to
|
||||||
List<TrackPublication> get subscribedTracks {
|
List<TrackPublication> get subscribedTracks {
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ class RemoteTrackPublication extends TrackPublication {
|
|||||||
|
|
||||||
VideoQuality get videoQuality => _videoQuality;
|
VideoQuality get videoQuality => _videoQuality;
|
||||||
set videoQuality(VideoQuality val) {
|
set videoQuality(VideoQuality val) {
|
||||||
|
if (val == _videoQuality) return;
|
||||||
_videoQuality = val;
|
_videoQuality = val;
|
||||||
_sendUpdateTrackSettings();
|
_sendUpdateTrackSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get enabled => !_disabled;
|
bool get enabled => !_disabled;
|
||||||
set enabled(bool val) {
|
set enabled(bool val) {
|
||||||
|
if (_disabled == !val) return;
|
||||||
_disabled = !val;
|
_disabled = !val;
|
||||||
_sendUpdateTrackSettings();
|
_sendUpdateTrackSettings();
|
||||||
}
|
}
|
||||||
@@ -30,6 +32,7 @@ class RemoteTrackPublication extends TrackPublication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set subscribed(bool val) {
|
set subscribed(bool val) {
|
||||||
|
if (_unsubscribed == !val) return;
|
||||||
_unsubscribed = !val;
|
_unsubscribed = !val;
|
||||||
_sendUpdateTrackSettings();
|
_sendUpdateTrackSettings();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user