mirror of
https://github.com/yattee/yattee.git
synced 2025-11-20 17:02:21 +00:00
Fix iOS Now Playing integration for MPV backend
The MPV backend now properly displays Now Playing information in iOS Control Center. The fix addresses the issue where the AVAudioSession would become inactive during MPV's playback lifecycle. Key changes: - Added setupAudioSessionForNowPlaying() method to activate AVAudioSession with proper playback category and movie playback mode - Re-activate audio session at critical MPV events: FILE_LOADED, PLAYBACK_RESTART, AUDIO_RECONFIG, and during periodic updates - Initialize audio session immediately after mpv_initialize() in MPVClient The audio session must be re-activated at multiple points during playback, not just at initialization, to ensure iOS recognizes the app as playing media.
This commit is contained in:
@@ -504,7 +504,10 @@ final class MPVBackend: PlayerBackend {
|
||||
updateControls()
|
||||
}
|
||||
|
||||
model.updateNowPlayingInfo()
|
||||
#if !os(macOS)
|
||||
model.setupAudioSessionForNowPlaying()
|
||||
model.updateNowPlayingInfo()
|
||||
#endif
|
||||
|
||||
handleSegmentsThrottle.execute {
|
||||
model.handleSegments(at: currentTime)
|
||||
@@ -594,6 +597,11 @@ final class MPVBackend: PlayerBackend {
|
||||
onFileLoaded = nil
|
||||
// Reset retry state on successful load
|
||||
resetRetryState()
|
||||
// Re-activate audio session for Now Playing
|
||||
#if !os(macOS)
|
||||
model.setupAudioSessionForNowPlaying()
|
||||
model.updateNowPlayingInfo()
|
||||
#endif
|
||||
|
||||
case MPV_EVENT_PROPERTY_CHANGE:
|
||||
let dataOpaquePtr = OpaquePointer(event.pointee.data)
|
||||
@@ -611,10 +619,22 @@ final class MPVBackend: PlayerBackend {
|
||||
onFileLoaded = nil
|
||||
// Reset retry state on successful playback restart
|
||||
resetRetryState()
|
||||
// Re-activate audio session for Now Playing
|
||||
#if !os(macOS)
|
||||
model.setupAudioSessionForNowPlaying()
|
||||
model.updateNowPlayingInfo()
|
||||
#endif
|
||||
|
||||
case MPV_EVENT_VIDEO_RECONFIG:
|
||||
model.updateAspectRatio()
|
||||
|
||||
case MPV_EVENT_AUDIO_RECONFIG:
|
||||
// Re-activate audio session when audio is reconfigured
|
||||
#if !os(macOS)
|
||||
model.setupAudioSessionForNowPlaying()
|
||||
model.updateNowPlayingInfo()
|
||||
#endif
|
||||
|
||||
case MPV_EVENT_SEEK:
|
||||
isSeeking = true
|
||||
|
||||
|
||||
@@ -135,6 +135,12 @@ final class MPVClient: ObservableObject {
|
||||
|
||||
checkError(mpv_initialize(mpv))
|
||||
|
||||
#if !os(macOS)
|
||||
// Set up audio session for Now Playing support
|
||||
backend?.model.setupAudioSessionForNowPlaying()
|
||||
backend?.model.updateNowPlayingInfo()
|
||||
#endif
|
||||
|
||||
let api = UnsafeMutableRawPointer(mutating: (MPV_RENDER_API_TYPE_OPENGL as NSString).utf8String)
|
||||
var initParams = mpv_opengl_init_params(
|
||||
get_proc_address: getProcAddress,
|
||||
|
||||
Reference in New Issue
Block a user