feat: Support for capturing audio for chrome tab. (#158)
* feat: Support for capturing audio for chrome tab. * Update code comments.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import '../../proto/livekit_models.pb.dart' as lk_models;
|
||||
import '../../types/other.dart';
|
||||
@@ -15,7 +16,8 @@ class LocalAudioTrack extends LocalTrack
|
||||
covariant AudioCaptureOptions currentOptions;
|
||||
|
||||
// private constructor
|
||||
LocalAudioTrack._(
|
||||
@internal
|
||||
LocalAudioTrack(
|
||||
String name,
|
||||
TrackSource source,
|
||||
rtc.MediaStream stream,
|
||||
@@ -36,7 +38,7 @@ class LocalAudioTrack extends LocalTrack
|
||||
options ??= const AudioCaptureOptions();
|
||||
final stream = await LocalTrack.createStream(options);
|
||||
|
||||
return LocalAudioTrack._(
|
||||
return LocalAudioTrack(
|
||||
'',
|
||||
TrackSource.microphone,
|
||||
stream,
|
||||
|
||||
@@ -119,7 +119,9 @@ abstract class LocalTrack extends Track {
|
||||
final constraints = <String, dynamic>{
|
||||
'audio': options is AudioCaptureOptions
|
||||
? options.toMediaConstraintsMap()
|
||||
: false,
|
||||
: options is ScreenShareCaptureOptions
|
||||
? (options).captureScreenAudio
|
||||
: false,
|
||||
'video': options is VideoCaptureOptions
|
||||
? options.toMediaConstraintsMap()
|
||||
: false,
|
||||
|
||||
@@ -5,6 +5,7 @@ import '../../proto/livekit_models.pb.dart' as lk_models;
|
||||
import '../../types/other.dart';
|
||||
import '../options.dart';
|
||||
import '../track.dart';
|
||||
import 'audio.dart';
|
||||
import 'local.dart';
|
||||
|
||||
/// A video track from the local device. Use static methods in this class to create
|
||||
@@ -63,6 +64,39 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
/// Creates a LocalTracks(audio/video) from the display.
|
||||
///
|
||||
/// The current API is mainly used to capture audio when chrome captures tab,
|
||||
/// but in the future it can also be used for flutter native to open audio
|
||||
/// capture device when capturing screen
|
||||
static Future<List<LocalTrack>> createScreenShareTracksWithAudio([
|
||||
ScreenShareCaptureOptions? options,
|
||||
]) async {
|
||||
options ??= const ScreenShareCaptureOptions(captureScreenAudio: true);
|
||||
|
||||
final stream = await LocalTrack.createStream(options);
|
||||
|
||||
List<LocalTrack> tracks = [
|
||||
LocalVideoTrack._(
|
||||
Track.screenShareName,
|
||||
TrackSource.screenShareVideo,
|
||||
stream,
|
||||
stream.getVideoTracks().first,
|
||||
options,
|
||||
)
|
||||
];
|
||||
|
||||
if (stream.getAudioTracks().isNotEmpty) {
|
||||
tracks.add(LocalAudioTrack(
|
||||
Track.screenShareName,
|
||||
TrackSource.screenShareAudio,
|
||||
stream,
|
||||
stream.getAudioTracks().first,
|
||||
const AudioCaptureOptions()));
|
||||
}
|
||||
return tracks;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user