feat: Re-add native apple controls for mpv (#1411)

This commit is contained in:
Alex
2026-02-19 17:38:01 +11:00
committed by GitHub
parent 8a782fb0c9
commit 9f9d949891
7 changed files with 361 additions and 9 deletions

View File

@@ -10,6 +10,7 @@ protocol MPVLayerRendererDelegate: AnyObject {
func renderer(_ renderer: MPVLayerRenderer, didChangeLoading isLoading: Bool)
func renderer(_ renderer: MPVLayerRenderer, didBecomeReadyToSeek: Bool)
func renderer(_ renderer: MPVLayerRenderer, didBecomeTracksReady: Bool)
func renderer(_ renderer: MPVLayerRenderer, didSelectAudioOutput audioOutput: String)
}
/// MPV player using vo_avfoundation for video output.
@@ -347,7 +348,8 @@ final class MPVLayerRenderer {
("pause", MPV_FORMAT_FLAG),
("track-list/count", MPV_FORMAT_INT64),
("paused-for-cache", MPV_FORMAT_FLAG),
("demuxer-cache-duration", MPV_FORMAT_DOUBLE)
("demuxer-cache-duration", MPV_FORMAT_DOUBLE),
("current-ao", MPV_FORMAT_STRING)
]
for (name, format) in properties {
mpv_observe_property(handle, 0, name, format)
@@ -552,6 +554,15 @@ final class MPVLayerRenderer {
self.delegate?.renderer(self, didBecomeTracksReady: true)
}
}
case "current-ao":
// Audio output is now active - notify delegate
if let aoName = getStringProperty(handle: handle, name: name) {
print("[MPV] 🔊 Audio output selected: \(aoName)")
DispatchQueue.main.async { [weak self] in
guard let self else { return }
self.delegate?.renderer(self, didSelectAudioOutput: aoName)
}
}
default:
break
}