AVPlayer background music mode

This commit is contained in:
Arkadiusz Fal
2022-08-20 22:31:03 +02:00
parent b5f8a0fba2
commit 48e616b301
6 changed files with 129 additions and 41 deletions

View File

@@ -588,6 +588,42 @@ final class AVPlayerBackend: PlayerBackend {
controlsUpdates = false
}
func startMusicMode() {
if model.playingInPictureInPicture {
closePiP()
}
playerLayer.player = nil
toggleVisualTracksEnabled(false)
}
func stopMusicMode() {
playerLayer.player = avPlayer
toggleVisualTracksEnabled(true)
}
func toggleVisualTracksEnabled(_ value: Bool) {
if let item = avPlayer.currentItem {
for playerItemTrack in item.tracks {
if let assetTrack = playerItemTrack.assetTrack,
assetTrack.hasMediaCharacteristic(AVMediaCharacteristic.visual)
{
playerItemTrack.isEnabled = value
}
}
}
}
func didChangeTo() {
if model.musicMode {
startMusicMode()
} else {
stopMusicMode()
}
}
func setNeedsDrawing(_: Bool) {}
func setSize(_: Double, _: Double) {}
func setNeedsNetworkStateUpdates(_: Bool) {}

View File

@@ -512,4 +512,36 @@ final class MPVBackend: PlayerBackend {
networkStateTimer.pause()
}
}
func startMusicMode() {
setVideoToNo()
}
func stopMusicMode() {
addVideoTrackFromStream()
setVideoToAuto()
controls.resetTimer()
}
func addVideoTrackFromStream() {
if let videoTrackURL = model.stream?.videoAsset?.url,
tracks < 2
{
logger.info("adding video track")
addVideoTrack(videoTrackURL)
}
setVideoToAuto()
}
func didChangeTo() {
setNeedsDrawing(model.presentingPlayer)
if model.musicMode {
startMusicMode()
} else {
stopMusicMode()
}
}
}

View File

@@ -47,10 +47,15 @@ protocol PlayerBackend {
func closePiP()
func startMusicMode()
func stopMusicMode()
func updateControls()
func startControlsUpdates()
func stopControlsUpdates()
func didChangeTo()
func setNeedsNetworkStateUpdates(_ needsUpdates: Bool)
func setNeedsDrawing(_ needsDrawing: Bool)