fix(ios): configure audio session before playback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
sibylla canton 2026-11-03 16:10:58 +01:00
parent 6223c438cf
commit c9ed9489e3

View File

@ -36,6 +36,7 @@ final class VlcPlayerEngineFactory: NSObject, NativePlayerEngineFactory {
/// Every VLC call is made on the main queue, in the order the Kotlin side issued it.
final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegate {
private let player = VLCMediaPlayer()
private let audioSession = AVAudioSession.sharedInstance()
private var listener: NativePlayerListener?
private var released = false
@ -47,7 +48,6 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
override init() {
super.init()
player.delegate = self
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
// MARK: NativePlayerEngine
@ -70,6 +70,7 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
}
self.lastReportedDurationMs = 0
self.player.media = media
self.applyPlaybackSettings()
self.report(.opening)
if autoPlay { self.startPlayback() }
}
@ -121,11 +122,15 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
onMain {
guard !self.released else { return }
self.released = true
self.listener = nil
self.player.delegate = nil
self.player.stop()
self.player.media = nil
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
do {
try self.audioSession.setActive(false, options: .notifyOthersOnDeactivation)
} catch {
self.listener?.onError(message: "Could not deactivate audio session: \(error.localizedDescription)")
}
self.listener = nil
}
}
@ -172,7 +177,19 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
// MARK: Internals
private func startPlayback() {
try? AVAudioSession.sharedInstance().setActive(true)
do {
try audioSession.setCategory(.playback, mode: .default, options: [])
} catch {
listener?.onError(message: "Could not configure audio session: \(error.localizedDescription)")
return
}
do {
try audioSession.setActive(true)
} catch {
listener?.onError(message: "Could not activate audio session: \(error.localizedDescription)")
return
}
applyPlaybackSettings()
player.play()
}