organize track & pub to directory

This commit is contained in:
Hiroshi Horie
2021-11-30 17:29:18 +07:00
parent 11a1d22e7f
commit 2cd3198cdd
19 changed files with 49 additions and 48 deletions
+46
View File
@@ -0,0 +1,46 @@
import 'dart:async';
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../../proto/livekit_models.pb.dart' as lk_models;
import '../../types.dart';
import '../audio_management.dart';
import '../local.dart';
import '../options.dart';
class LocalAudioTrack extends LocalTrack with AudioTrack, AudioManagementMixin {
// Options used for this track
@override
covariant LocalAudioTrackOptions currentOptions;
// private constructor
LocalAudioTrack._(
String name,
TrackSource source,
rtc.MediaStream stream,
rtc.MediaStreamTrack track,
this.currentOptions,
) : super(
name,
lk_models.TrackType.AUDIO,
source,
stream,
track,
);
/// Creates a new audio track from the default audio input device.
static Future<LocalAudioTrack> create([
LocalAudioTrackOptions? options,
]) async {
options ??= const LocalAudioTrackOptions();
final stream = await LocalTrack.createStream(options);
return LocalAudioTrack._(
'',
TrackSource.microphone,
stream,
stream.getAudioTracks().first,
options,
);
}
}
+82
View File
@@ -0,0 +1,82 @@
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../../logger.dart';
import '../../proto/livekit_models.pb.dart' as lk_models;
import '../../types.dart';
import '../local.dart';
import '../options.dart';
import '../track.dart';
/// A video track from the local device. Use static methods in this class to create
/// video tracks.
class LocalVideoTrack extends LocalTrack with VideoTrack {
// Options used for this track
@override
covariant LocalVideoTrackOptions currentOptions;
// Private constructor
LocalVideoTrack._(
String name,
TrackSource source,
rtc.MediaStream stream,
rtc.MediaStreamTrack track,
this.currentOptions,
) : super(
name,
lk_models.TrackType.VIDEO,
source,
stream,
track,
);
/// Creates a LocalVideoTrack from camera input.
static Future<LocalVideoTrack> createCameraTrack([
CameraTrackOptions? options,
]) async {
options ??= const CameraTrackOptions();
final stream = await LocalTrack.createStream(options);
return LocalVideoTrack._(
Track.cameraName,
TrackSource.camera,
stream,
stream.getVideoTracks().first,
options,
);
}
/// Creates a LocalVideoTrack from the display.
///
/// Note: Android requires a foreground service to be started prior to
/// creating a screen track. Refer to the example app for an implementation.
static Future<LocalVideoTrack> createScreenShareTrack([
ScreenShareTrackOptions? options,
]) async {
options ??= const ScreenShareTrackOptions();
final stream = await LocalTrack.createStream(options);
return LocalVideoTrack._(
Track.screenShareName,
TrackSource.screenShareVideo,
stream,
stream.getVideoTracks().first,
options,
);
}
}
//
// Convenience extensions
//
extension LocalVideoTrackExt on LocalVideoTrack {
// Calls restartTrack under the hood
Future<void> setCameraPosition(CameraPosition position) async {
final options = currentOptions;
if (options is! CameraTrackOptions) {
logger.warning('Not a camera track');
return;
}
await restartTrack(
options.copyWith(cameraPosition: position),
);
}
}