diff --git a/.changes/broadcast-crash b/.changes/broadcast-crash new file mode 100644 index 000000000..c334bb724 --- /dev/null +++ b/.changes/broadcast-crash @@ -0,0 +1 @@ +patch type="fixed" "Crash when moving apps to background during broadcast" diff --git a/Sources/LiveKit/Audio/MixerEngineObserver.swift b/Sources/LiveKit/Audio/MixerEngineObserver.swift index df4422056..7ae8d8f66 100644 --- a/Sources/LiveKit/Audio/MixerEngineObserver.swift +++ b/Sources/LiveKit/Audio/MixerEngineObserver.swift @@ -206,6 +206,13 @@ extension MixerEngineObserver { // Capture appAudio and apply conversion automatically suitable for internal audio engine. public func capture(appAudio inputBuffer: AVAudioPCMBuffer) { + guard let converter = converter(for: inputBuffer.format) else { + log("Failed to get converter for input buffer format: \(inputBuffer.format)", .warning) + return + } + + let buffer = converter.convert(from: inputBuffer) + let (isConnected, appNode) = _state.read { ($0.isInputConnected, $0.appNode) } @@ -215,15 +222,9 @@ extension MixerEngineObserver { return } - // Create or update the converter if needed - let converter = converter(for: inputBuffer.format) - - guard let converter else { return } - - let buffer = converter.convert(from: inputBuffer) appNode.scheduleBuffer(buffer) - if !appNode.isPlaying { + if !appNode.isPlaying, let engine = appNode.engine, engine.isRunning { appNode.play() } }