Skip to content
Open
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
1 change: 1 addition & 0 deletions lib/src/core/engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
completer.completeError('Engine disconnected');
}
}

events.once<EngineClosingEvent>((e) => onClosing());

while (!_dcBufferStatus[kind]!) {
Expand Down
17 changes: 12 additions & 5 deletions lib/src/track/local/local.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ 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 @@ -147,6 +144,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 @@ -261,14 +265,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 @@ -294,6 +299,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 @@ -81,6 +81,7 @@ class CameraCaptureOptions extends VideoCaptureOptions {
params: captureOptions.params,
deviceId: captureOptions.deviceId,
maxFrameRate: captureOptions.maxFrameRate,
processor: captureOptions.processor,
);

@override
Expand Down Expand Up @@ -112,19 +113,25 @@ 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 @@ -229,8 +229,25 @@ abstract class Track extends DisposableChangeNotifier
}

@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,
));
}
}
Loading