Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
211bfe9
fix: tighten VideoTrackRenderer Widget
holzgeist Jan 22, 2025
ff23d72
fix(web, firefox): backup old values before overwriting them
holzgeist Jul 8, 2025
591eaba
fix: copy processor
holzgeist Apr 2, 2025
64aba20
fix: properly handle processor updates
holzgeist Jul 3, 2025
7b7c583
fix: properly update processed streams
holzgeist Jul 16, 2025
d65a15d
Merge remote-tracking branch 'upstream/main' into feat-blurring
holzgeist Aug 4, 2025
19f3d05
fix: stop stream first, processor second
holzgeist Aug 21, 2025
4734a3b
Merge branch 'main' into feat-blurring
holzgeist Aug 26, 2025
e92daaa
chore: format files
holzgeist Aug 26, 2025
1cd7c2a
chore: update webrtc sdk to same version as flutter-webrtc
holzgeist Aug 26, 2025
1b0a286
chore: run import sorter
holzgeist Aug 26, 2025
8d86095
chore: fix analyzer issues
holzgeist Aug 26, 2025
8eb03d9
Merge branch 'main' into feat-blurring
cloudwebrtc Aug 28, 2025
5d24c85
chore: fix imports after merge from main
holzgeist Sep 1, 2025
3a74e8d
Merge remote-tracking branch 'upstream/main' into feat-blurring
holzgeist Sep 17, 2025
526f347
Merge tag 'v2.5.1' into feat-blurring
holzgeist Oct 14, 2025
a2b9154
Merge remote-tracking branch 'upstream/main' into feat-blurring
holzgeist Oct 14, 2025
f297b18
chore: reformat files
holzgeist Oct 14, 2025
5b6bf43
chore: run import sorter
holzgeist Oct 14, 2025
a46e292
Merge tag 'v2.5.2' into feat-blurring
holzgeist Oct 27, 2025
b647017
chore: reformat
holzgeist Oct 27, 2025
0f20487
chore: run import sorter
holzgeist Oct 27, 2025
76bafa4
fix: remove unused import
holzgeist Oct 27, 2025
ad56f16
Merge tag 'v2.5.3' into feat-blurring
holzgeist Nov 11, 2025
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
15 changes: 12 additions & 3 deletions lib/src/track/local/local.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import '../../support/platform.dart';
import '../../types/other.dart';
import '../options.dart';
import '../processor.dart';
import '../processor_native.dart' if (dart.library.js_interop) '../processor_web.dart';
import '../remote/audio.dart';
import '../remote/video.dart';
import '../track.dart';
Expand Down Expand Up @@ -144,6 +143,13 @@ abstract class LocalTrack extends Track {
logger.severe('MediaStreamTrack.dispose() did throw $error');
}
_stopped = true;
try {
if (_processor != null) {
await stopProcessor();
}
} catch (error) {
logger.severe('LocalTrack.stopProcessor did throw: $error');
}
}
return didStop;
}
Expand Down Expand Up @@ -254,14 +260,15 @@ abstract class LocalTrack extends Track {

_processor = processor;

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

await _processor!.init(processorOptions);

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

logger.fine('processor initialized');
Expand All @@ -287,6 +294,8 @@ abstract class LocalTrack extends Track {
// force re-setting of the mediaStreamTrack on the sender
//await this.setMediaStreamTrack(this._mediaStreamTrack, true);

await setProcessedTrack(null);

events.emit(TrackProcessorUpdateEvent(track: this));
}

Expand Down
11 changes: 9 additions & 2 deletions lib/src/track/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class CameraCaptureOptions extends VideoCaptureOptions {
params: captureOptions.params,
deviceId: captureOptions.deviceId,
maxFrameRate: captureOptions.maxFrameRate,
processor: captureOptions.processor,
);

@override
Expand Down Expand Up @@ -108,18 +109,24 @@ class CameraCaptureOptions extends VideoCaptureOptions {

// Returns new options with updated properties
CameraCaptureOptions copyWith({
VideoParameters? params,
CameraPosition? cameraPosition,
CameraFocusMode? focusMode,
CameraExposureMode? exposureMode,
String? deviceId,
double? maxFrameRate,
VideoParameters? params,
bool? stopCameraCaptureOnMute,
TrackProcessor<VideoProcessorOptions>? processor,
}) =>
CameraCaptureOptions(
params: params ?? this.params,
cameraPosition: cameraPosition ?? this.cameraPosition,
focusMode: focusMode ?? this.focusMode,
exposureMode: exposureMode ?? this.exposureMode,
deviceId: deviceId ?? this.deviceId,
maxFrameRate: maxFrameRate ?? this.maxFrameRate,
params: params ?? this.params,
stopCameraCaptureOnMute: stopCameraCaptureOnMute ?? this.stopCameraCaptureOnMute,
processor: processor ?? this.processor,
);
}

Expand Down
23 changes: 20 additions & 3 deletions lib/src/track/track.dart
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,25 @@ abstract class Track extends DisposableChangeNotifier with EventsEmittable<Track
}

@internal
void setProcessedTrack(rtc.MediaStreamTrack track) {
_originalTrack = _mediaStreamTrack;
_mediaStreamTrack = track;
Future<void> setProcessedTrack(rtc.MediaStreamTrack? track) async {
if (track != null) {
// set processed track
_originalTrack = _mediaStreamTrack;
_mediaStreamTrack = track;
if (_originalTrack != null) {
await _mediaStream.removeTrack(_originalTrack!);
}
await _mediaStream.addTrack(track);
} else if (_originalTrack != null) {
// reset processed track
await _mediaStream.removeTrack(_mediaStreamTrack);
await _mediaStream.addTrack(_originalTrack!);
_mediaStreamTrack = _originalTrack!;
_originalTrack = null;
}
events.emit(TrackStreamUpdatedEvent(
track: this,
stream: _mediaStream,
));
}
}