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. /// Every VLC call is made on the main queue, in the order the Kotlin side issued it.
final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegate { final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegate {
private let player = VLCMediaPlayer() private let player = VLCMediaPlayer()
private let audioSession = AVAudioSession.sharedInstance()
private var listener: NativePlayerListener? private var listener: NativePlayerListener?
private var released = false private var released = false
@ -47,7 +48,6 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
override init() { override init() {
super.init() super.init()
player.delegate = self player.delegate = self
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
} }
// MARK: NativePlayerEngine // MARK: NativePlayerEngine
@ -70,6 +70,7 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
} }
self.lastReportedDurationMs = 0 self.lastReportedDurationMs = 0
self.player.media = media self.player.media = media
self.applyPlaybackSettings()
self.report(.opening) self.report(.opening)
if autoPlay { self.startPlayback() } if autoPlay { self.startPlayback() }
} }
@ -121,11 +122,15 @@ final class VlcPlayerEngine: NSObject, NativePlayerEngine, VLCMediaPlayerDelegat
onMain { onMain {
guard !self.released else { return } guard !self.released else { return }
self.released = true self.released = true
self.listener = nil
self.player.delegate = nil self.player.delegate = nil
self.player.stop() self.player.stop()
self.player.media = nil 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 // MARK: Internals
private func startPlayback() { 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() player.play()
} }