Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/livekit_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ export 'src/track/remote/audio.dart';
export 'src/track/remote/remote.dart';
export 'src/track/remote/video.dart';
export 'src/track/track.dart';

export 'src/track/processor.dart';
export 'src/track/processor_native.dart'
if (dart.library.js_interop) 'src/track/processor_web.dart';

export 'src/track/audio_visualizer.dart';
export 'src/types/other.dart';
export 'src/types/participant_permissions.dart';
Expand Down
4 changes: 3 additions & 1 deletion lib/src/support/platform/io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

import 'dart:io';

import 'package:flutter/foundation.dart';

import '../platform.dart';

PlatformType lkPlatformImplementation() {
Expand All @@ -31,7 +33,7 @@ bool lkPlatformIsWebMobileImplementation() {
}

bool lkPlatformIsTestImplementation() =>
Platform.environment.containsKey('FLUTTER_TEST');
!kIsWeb && !kIsWasm && Platform.environment.containsKey('FLUTTER_TEST');

bool lkE2EESupportedImplementation() {
return [
Expand Down
10 changes: 8 additions & 2 deletions lib/src/track/local/local.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ import '../track.dart';
import 'audio.dart';
import 'video.dart';

import '../processor_native.dart'
if (dart.library.js_interop) '../processor_web.dart';

/// Used to group [LocalVideoTrack] and [RemoteVideoTrack].
mixin VideoTrack on Track {
@internal
Expand Down Expand Up @@ -258,13 +261,16 @@ abstract class LocalTrack extends Track {

_processor = processor;

var processorOptions = ProcessorOptions(
kind: kind,
var processorOptions = AudioProcessorOptions(
track: mediaStreamTrack,
);

await _processor!.init(processorOptions);

if (_processor?.processedTrack != null) {
setProcessedTrack(processor!.processedTrack!);
}

logger.fine('processor initialized');

events.emit(TrackProcessorUpdateEvent(track: this, processor: _processor));
Expand Down
3 changes: 3 additions & 0 deletions lib/src/track/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ import '../track/local/video.dart';
import '../types/video_parameters.dart';
import 'processor.dart';

import 'processor_native.dart'
if (dart.library.js_interop) 'processor_web.dart';

/// A type that represents front or back of the camera.
enum CameraPosition {
front,
Expand Down
16 changes: 3 additions & 13 deletions lib/src/track/processor.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'package:webrtc_interface/webrtc_interface.dart';

import '../core/room.dart';
import '../types/other.dart';
Expand All @@ -12,18 +12,6 @@ class ProcessorOptions<T extends TrackType> {
});
}

class AudioProcessorOptions extends ProcessorOptions {
AudioProcessorOptions({
required MediaStreamTrack track,
}) : super(kind: TrackType.AUDIO, track: track);
}

class VideoProcessorOptions extends ProcessorOptions {
VideoProcessorOptions({
required MediaStreamTrack track,
}) : super(kind: TrackType.VIDEO, track: track);
}

abstract class TrackProcessor<T extends ProcessorOptions> {
String get name;

Expand All @@ -36,4 +24,6 @@ abstract class TrackProcessor<T extends ProcessorOptions> {
Future<void> onPublish(Room room);

Future<void> onUnpublish();

MediaStreamTrack? get processedTrack;
}
16 changes: 16 additions & 0 deletions lib/src/track/processor_native.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:flutter_webrtc/flutter_webrtc.dart';

import '../types/other.dart';
import 'processor.dart';

class AudioProcessorOptions extends ProcessorOptions {
AudioProcessorOptions({
required MediaStreamTrack track,
}) : super(kind: TrackType.AUDIO, track: track);
}

class VideoProcessorOptions extends ProcessorOptions {
VideoProcessorOptions({
required MediaStreamTrack track,
}) : super(kind: TrackType.VIDEO, track: track);
}
18 changes: 13 additions & 5 deletions lib/src/track/processor_web.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
import 'package:web/web.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' show MediaStreamTrack;
import 'package:web/web.dart' show AudioContext, HTMLAudioElement;

import '../types/other.dart';
import 'processor.dart';

class AudioProcessorOptionsWeb extends AudioProcessorOptions {
AudioProcessorOptionsWeb({
class AudioProcessorOptions extends ProcessorOptions {
AudioProcessorOptions({
required MediaStreamTrack track,
this.audioElement,
this.audioContext,
required super.track,
});
}) : super(kind: TrackType.AUDIO, track: track);

HTMLAudioElement? audioElement;
AudioContext? audioContext;
}

class VideoProcessorOptions extends ProcessorOptions {
VideoProcessorOptions({
required MediaStreamTrack track,
}) : super(kind: TrackType.VIDEO, track: track);
}
8 changes: 8 additions & 0 deletions lib/src/track/track.dart
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ abstract class Track extends DisposableChangeNotifier
rtc.MediaStreamTrack get mediaStreamTrack => _mediaStreamTrack;
rtc.MediaStreamTrack _mediaStreamTrack;

rtc.MediaStreamTrack? _originalTrack;

String? sid;
rtc.RTCRtpTransceiver? transceiver;
String? _cid;
Expand Down Expand Up @@ -220,4 +222,10 @@ abstract class Track extends DisposableChangeNotifier
stream: stream,
));
}

@internal
void setProcessedTrack(rtc.MediaStreamTrack track) {
_originalTrack = _mediaStreamTrack;
_mediaStreamTrack = track;
}
}