organize track & pub to directory
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user