test media controll

700 COMMITS 🎊
This commit is contained in:
Francesco 2025-05-27 14:48:43 +02:00
parent 8c93ec7bed
commit f845ce3d7f
2 changed files with 61 additions and 13 deletions

View file

@ -14,7 +14,6 @@ class NormalPlayer: AVPlayerViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupHoldGesture()
setupAudioSession()
}
private func setupHoldGesture() {
@ -46,16 +45,4 @@ class NormalPlayer: AVPlayerViewController {
private func endHoldSpeed() {
player?.rate = originalRate
}
func setupAudioSession() {
do {
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playback, mode: .moviePlayback, options: .mixWithOthers)
try audioSession.setActive(true)
try audioSession.overrideOutputAudioPort(.speaker)
} catch {
Logger.shared.log("Didn't set up AVAudioSession: \(error)", type: "Debug")
}
}
}

View file

@ -7,6 +7,7 @@
import UIKit
import AVKit
import MediaPlayer
class VideoPlayerViewController: UIViewController {
let module: ScrapingModule
@ -37,6 +38,9 @@ class VideoPlayerViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupNowPlaying()
setupRemoteTransportControls()
guard let streamUrl = streamUrl, let url = URL(string: streamUrl) else {
return
}
@ -60,6 +64,14 @@ class VideoPlayerViewController: UIViewController {
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
player?.allowsExternalPlayback = false
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .moviePlayback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Failed to set audio session category: \(error)")
}
playerViewController = NormalPlayer()
playerViewController?.player = player
@ -84,6 +96,42 @@ class VideoPlayerViewController: UIViewController {
}
}
private func setupNowPlaying() {
let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
var nowPlayingInfo = [String: Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "Episode \(episodeNumber)"
nowPlayingInfo[MPMediaItemPropertyArtist] = mediaTitle
if let imageUrl = URL(string: episodeImageUrl) {
URLSession.shared.dataTask(with: imageUrl) { [weak self] data, _, _ in
guard let data = data, let image = UIImage(data: data) else { return }
let artwork = MPMediaItemArtwork(boundsSize: image.size) { _ in image }
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}.resume()
}
nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo
}
private func setupRemoteTransportControls() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.addTarget { [weak self] _ in
self?.player?.play()
return .success
}
commandCenter.pauseCommand.addTarget { [weak self] _ in
self?.player?.pause()
return .success
}
commandCenter.seekForwardCommand.isEnabled = false
commandCenter.seekBackwardCommand.isEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
player?.play()
@ -162,6 +210,18 @@ class VideoPlayerViewController: UIViewController {
}
}
func updateNowPlayingInfo() {
guard let player = player,
let currentItem = player.currentItem else { return }
var nowPlayingInfo = MPNowPlayingInfoCenter.default().nowPlayingInfo ?? [:]
nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentItem.currentTime().seconds
nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = currentItem.duration.seconds
nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if UserDefaults.standard.bool(forKey: "alwaysLandscape") {
return .landscape
@ -183,5 +243,6 @@ class VideoPlayerViewController: UIViewController {
if let timeObserverToken = timeObserverToken {
player?.removeTimeObserver(timeObserverToken)
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
}
}