mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-11-04 10:13:59 +00:00
fix(ios): configure audio session before playback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
6223c438cf
commit
c9ed9489e3
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user