Skip to content

Commit a700117

Browse files
authored
feat: noise filter for flutter web. (#762)
* feat: noise filter for flutter web. * import sorter.
1 parent 1ad4cf7 commit a700117

File tree

8 files changed

+58
-21
lines changed

8 files changed

+58
-21
lines changed

lib/livekit_client.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ export 'src/track/remote/audio.dart';
4444
export 'src/track/remote/remote.dart';
4545
export 'src/track/remote/video.dart';
4646
export 'src/track/track.dart';
47+
4748
export 'src/track/processor.dart';
49+
export 'src/track/processor_native.dart'
50+
if (dart.library.js_interop) 'src/track/processor_web.dart';
51+
4852
export 'src/track/audio_visualizer.dart';
4953
export 'src/types/other.dart';
5054
export 'src/types/participant_permissions.dart';

lib/src/support/platform/io.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import 'dart:io';
1616

17+
import 'package:flutter/foundation.dart';
18+
1719
import '../platform.dart';
1820

1921
PlatformType lkPlatformImplementation() {
@@ -31,7 +33,7 @@ bool lkPlatformIsWebMobileImplementation() {
3133
}
3234

3335
bool lkPlatformIsTestImplementation() =>
34-
Platform.environment.containsKey('FLUTTER_TEST');
36+
!kIsWeb && !kIsWasm && Platform.environment.containsKey('FLUTTER_TEST');
3537

3638
bool lkE2EESupportedImplementation() {
3739
return [

lib/src/track/local/local.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ import '../track.dart';
3636
import 'audio.dart';
3737
import 'video.dart';
3838

39+
import '../processor_native.dart'
40+
if (dart.library.js_interop) '../processor_web.dart';
41+
3942
/// Used to group [LocalVideoTrack] and [RemoteVideoTrack].
4043
mixin VideoTrack on Track {
4144
@internal
@@ -258,13 +261,16 @@ abstract class LocalTrack extends Track {
258261

259262
_processor = processor;
260263

261-
var processorOptions = ProcessorOptions(
262-
kind: kind,
264+
var processorOptions = AudioProcessorOptions(
263265
track: mediaStreamTrack,
264266
);
265267

266268
await _processor!.init(processorOptions);
267269

270+
if (_processor?.processedTrack != null) {
271+
setProcessedTrack(processor!.processedTrack!);
272+
}
273+
268274
logger.fine('processor initialized');
269275

270276
events.emit(TrackProcessorUpdateEvent(track: this, processor: _processor));

lib/src/track/options.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ import '../track/local/video.dart';
2121
import '../types/video_parameters.dart';
2222
import 'processor.dart';
2323

24+
import 'processor_native.dart'
25+
if (dart.library.js_interop) 'processor_web.dart';
26+
2427
/// A type that represents front or back of the camera.
2528
enum CameraPosition {
2629
front,

lib/src/track/processor.dart

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:flutter_webrtc/flutter_webrtc.dart';
1+
import 'package:webrtc_interface/webrtc_interface.dart';
22

33
import '../core/room.dart';
44
import '../types/other.dart';
@@ -12,18 +12,6 @@ class ProcessorOptions<T extends TrackType> {
1212
});
1313
}
1414

15-
class AudioProcessorOptions extends ProcessorOptions {
16-
AudioProcessorOptions({
17-
required MediaStreamTrack track,
18-
}) : super(kind: TrackType.AUDIO, track: track);
19-
}
20-
21-
class VideoProcessorOptions extends ProcessorOptions {
22-
VideoProcessorOptions({
23-
required MediaStreamTrack track,
24-
}) : super(kind: TrackType.VIDEO, track: track);
25-
}
26-
2715
abstract class TrackProcessor<T extends ProcessorOptions> {
2816
String get name;
2917

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

3826
Future<void> onUnpublish();
27+
28+
MediaStreamTrack? get processedTrack;
3929
}

lib/src/track/processor_native.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:flutter_webrtc/flutter_webrtc.dart';
2+
3+
import '../types/other.dart';
4+
import 'processor.dart';
5+
6+
class AudioProcessorOptions extends ProcessorOptions {
7+
AudioProcessorOptions({
8+
required MediaStreamTrack track,
9+
}) : super(kind: TrackType.AUDIO, track: track);
10+
}
11+
12+
class VideoProcessorOptions extends ProcessorOptions {
13+
VideoProcessorOptions({
14+
required MediaStreamTrack track,
15+
}) : super(kind: TrackType.VIDEO, track: track);
16+
}

lib/src/track/processor_web.dart

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1-
import 'package:web/web.dart';
1+
import 'package:flutter_webrtc/flutter_webrtc.dart' show MediaStreamTrack;
2+
import 'package:web/web.dart' show AudioContext, HTMLAudioElement;
23

4+
import '../types/other.dart';
35
import 'processor.dart';
46

5-
class AudioProcessorOptionsWeb extends AudioProcessorOptions {
6-
AudioProcessorOptionsWeb({
7+
class AudioProcessorOptions extends ProcessorOptions {
8+
AudioProcessorOptions({
9+
required MediaStreamTrack track,
710
this.audioElement,
811
this.audioContext,
9-
required super.track,
10-
});
12+
}) : super(kind: TrackType.AUDIO, track: track);
1113

1214
HTMLAudioElement? audioElement;
1315
AudioContext? audioContext;
1416
}
17+
18+
class VideoProcessorOptions extends ProcessorOptions {
19+
VideoProcessorOptions({
20+
required MediaStreamTrack track,
21+
}) : super(kind: TrackType.VIDEO, track: track);
22+
}

lib/src/track/track.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ abstract class Track extends DisposableChangeNotifier
4646
rtc.MediaStreamTrack get mediaStreamTrack => _mediaStreamTrack;
4747
rtc.MediaStreamTrack _mediaStreamTrack;
4848

49+
rtc.MediaStreamTrack? _originalTrack;
50+
4951
String? sid;
5052
rtc.RTCRtpTransceiver? transceiver;
5153
String? _cid;
@@ -220,4 +222,10 @@ abstract class Track extends DisposableChangeNotifier
220222
stream: stream,
221223
));
222224
}
225+
226+
@internal
227+
void setProcessedTrack(rtc.MediaStreamTrack track) {
228+
_originalTrack = _mediaStreamTrack;
229+
_mediaStreamTrack = track;
230+
}
223231
}

0 commit comments

Comments
 (0)