diff --git a/lib/src/track/local/local.dart b/lib/src/track/local/local.dart index 3a3cea8c6..996ae0727 100644 --- a/lib/src/track/local/local.dart +++ b/lib/src/track/local/local.dart @@ -353,7 +353,7 @@ abstract class LocalTrack extends Track { await _processor!.init(processorOptions); if (_processor?.processedTrack != null) { - setProcessedTrack(processor.processedTrack!); + await setProcessedTrack(processor.processedTrack!); } logger.fine('processor initialized'); @@ -379,6 +379,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)); } diff --git a/lib/src/track/track.dart b/lib/src/track/track.dart index 3e029b82b..f990ca741 100644 --- a/lib/src/track/track.dart +++ b/lib/src/track/track.dart @@ -224,8 +224,25 @@ abstract class Track extends DisposableChangeNotifier with EventsEmittable 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, + )); } }