Fix audio visualizer exception (#1008)

Fix `MissingPluginException` when stopping audio visualizer.
This commit is contained in:
Hiroshi Horie
2026-03-02 21:19:24 +09:00
committed by GitHub
parent e9beaed972
commit 31ec6b09cc
4 changed files with 12 additions and 3 deletions

View File

@@ -0,0 +1 @@
patch type="fixed" "MissingPluginException when stopping audio visualizer on Android/iOS"

View File

@@ -53,11 +53,13 @@ class AudioVisualizerNative extends AudioVisualizer {
return;
}
await Native.stopVisualizer(mediaStreamTrack.id!, visualizerId: visualizerId);
// Cancel subscription before native stop, otherwise the native
// StreamHandler is already removed and cancel throws MissingPluginException.
await _streamSubscription?.cancel();
_streamSubscription = null;
_eventChannel = null;
await Native.stopVisualizer(mediaStreamTrack.id!, visualizerId: visualizerId);
}
}

View File

@@ -201,6 +201,7 @@ public class LiveKitPlugin: NSObject, FlutterPlugin {
}
for processors in audioProcessors.values {
processors.visualizers[visualizerId]?.stop()
processors.visualizers.removeValue(forKey: visualizerId)
}

View File

@@ -69,8 +69,13 @@ public class Visualizer: NSObject, RTCAudioRenderer, FlutterStreamHandler {
channel?.setStreamHandler(self)
}
deinit {
public func stop() {
_track?.remove(audioRenderer: self)
channel?.setStreamHandler(nil)
}
deinit {
stop()
}
public func render(pcmBuffer: AVAudioPCMBuffer) {