This commit is contained in:
Hiroshi Horie
2021-11-11 00:21:17 +09:00
19 changed files with 159 additions and 19 deletions
+3 -1
View File
@@ -8,7 +8,7 @@ import 'package:synchronized/synchronized.dart' as sync;
import '../logger.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../support/native_audio.dart';
import '../types.dart';
import 'local_audio_track.dart';
import 'track.dart';
@@ -35,11 +35,13 @@ abstract class AudioTrack extends Track {
rtc.MediaStream? mediaStream;
AudioTrack(
TrackSource source,
String name,
rtc.MediaStreamTrack track,
this.mediaStream,
) : super(
lk_models.TrackType.AUDIO,
source,
name,
track,
);
+9 -2
View File
@@ -4,16 +4,18 @@ import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../exceptions.dart';
import '../logger.dart';
import '../types.dart';
import 'audio_track.dart';
import 'options.dart';
class LocalAudioTrack extends AudioTrack {
// private constructor
LocalAudioTrack._(
TrackSource source,
String name,
rtc.MediaStreamTrack track,
rtc.MediaStream stream,
) : super(name, track, stream);
) : super(source, name, track, stream);
/// Creates a new audio track from the default audio input device.
static Future<LocalAudioTrack> create(
@@ -31,7 +33,12 @@ class LocalAudioTrack extends AudioTrack {
if (stream.getAudioTracks().isEmpty) throw TrackCreateException();
return LocalAudioTrack._('', stream.getAudioTracks().first, stream);
return LocalAudioTrack._(
TrackSource.microphone,
'',
stream.getAudioTracks().first,
stream,
);
}
@override
+5 -1
View File
@@ -2,6 +2,7 @@ import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../exceptions.dart';
import '../logger.dart';
import '../types.dart';
import 'options.dart';
import 'track.dart';
import 'video_track.dart';
@@ -18,11 +19,12 @@ class LocalVideoTrack extends VideoTrack {
// Private constructor
//
LocalVideoTrack._(
TrackSource source,
String name,
rtc.MediaStreamTrack mediaTrack,
rtc.MediaStream stream,
this.currentOptions,
) : super(name, mediaTrack, stream);
) : super(source, name, mediaTrack, stream);
rtc.RTCRtpSender? get sender => transceiver?.sender;
@@ -61,6 +63,7 @@ class LocalVideoTrack extends VideoTrack {
options ??= const CameraTrackOptions();
final stream = await _createStream(options);
return LocalVideoTrack._(
TrackSource.camera,
Track.cameraName,
stream.getVideoTracks().first,
stream,
@@ -74,6 +77,7 @@ class LocalVideoTrack extends VideoTrack {
options ??= const ScreenTrackOptions();
final stream = await _createStream(options);
return LocalVideoTrack._(
TrackSource.screenShareVideo,
Track.screenShareName,
stream.getVideoTracks().first,
stream,
+3 -1
View File
@@ -1,14 +1,16 @@
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../types.dart';
import '_audio_api.dart' if (dart.library.html) '_audio_html.dart' as audio;
import 'audio_track.dart';
class RemoteAudioTrack extends AudioTrack {
//
RemoteAudioTrack(
TrackSource source,
String name,
rtc.MediaStreamTrack track,
rtc.MediaStream stream,
) : super(name, track, stream);
) : super(source, name, track, stream);
@override
Future<bool> start() async {
+2 -2
View File
@@ -2,12 +2,12 @@ import 'dart:math';
import 'dart:ui';
import 'package:collection/collection.dart';
import 'package:livekit_client/src/internal/events.dart';
import 'package:livekit_client/src/logger.dart';
import 'package:meta/meta.dart';
import '../events.dart';
import '../extensions.dart';
import '../internal/events.dart';
import '../logger.dart';
import '../participant/remote_participant.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../proto/livekit_rtc.pb.dart' as lk_rtc;
+5 -2
View File
@@ -1,13 +1,16 @@
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import 'package:livekit_client/src/track/video_track.dart';
import '../track/video_track.dart';
import '../types.dart';
class RemoteVideoTrack extends VideoTrack {
//
RemoteVideoTrack(
TrackSource source,
String name,
rtc.MediaStreamTrack mediaTrack,
rtc.MediaStream stream,
) : super(name, mediaTrack, stream);
) : super(source, name, mediaTrack, stream);
@override
Future<bool> start() async {
+4 -1
View File
@@ -9,6 +9,7 @@ import '../logger.dart';
import '../managers/event.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../support/disposable.dart';
import '../types.dart';
/// Wrapper around a MediaStreamTrack with additional metadata.
/// Base for [AudioTrack] and [VideoTrack],
@@ -17,10 +18,11 @@ abstract class Track extends DisposableChangeNotifier
with EventsEmittable<TrackEvent> {
static const uuid = Uuid();
static const cameraName = 'camera';
static const screenShareName = 'screen';
static const screenShareName = 'screenshare';
final String name;
final lk_models.TrackType kind;
final TrackSource source;
rtc.MediaStreamTrack mediaStreamTrack;
String? sid;
@@ -33,6 +35,7 @@ abstract class Track extends DisposableChangeNotifier
Track(
this.kind,
this.source,
this.name,
this.mediaStreamTrack,
) {
+4 -1
View File
@@ -1,6 +1,7 @@
import '../support/disposable.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../types.dart';
import '../extensions.dart';
import 'track.dart';
/// Represents a track that's published to the server. This class contains
@@ -13,6 +14,7 @@ abstract class TrackPublication extends Disposable {
final String sid;
final String name;
final lk_models.TrackType kind;
final TrackSource source;
Track? track;
bool muted = false;
@@ -24,7 +26,8 @@ abstract class TrackPublication extends Disposable {
TrackPublication.fromInfo(lk_models.TrackInfo info)
: sid = info.sid,
name = info.name,
kind = info.type {
kind = info.type,
source = info.source.toLKType() {
updateFromInfo(info);
}
+4 -2
View File
@@ -1,8 +1,9 @@
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import 'package:livekit_client/src/internal/events.dart';
import 'package:meta/meta.dart';
import '../internal/events.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../types.dart';
import 'track.dart';
/// A video track will notify when its mediaTrack has changed.
@@ -10,12 +11,13 @@ abstract class VideoTrack extends Track {
rtc.MediaStream _mediaStream;
VideoTrack(
TrackSource source,
String name,
rtc.MediaStreamTrack mediaTrack,
this._mediaStream,
// this._client,
) : super(
lk_models.TrackType.VIDEO,
source,
name,
mediaTrack,
);