39 lines
1.1 KiB
Swift
39 lines
1.1 KiB
Swift
import SwiftUI
|
|
import AVKit
|
|
|
|
class PlayerViewController: AVPlayerViewController {
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
allowsPictureInPicturePlayback = true
|
|
}
|
|
}
|
|
|
|
struct JellyfinPlayerView: View {
|
|
let videoUrl: String
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
var body: some View {
|
|
if let url = URL(string: videoUrl) {
|
|
VideoViewControllerRepresentable(url: url, dismiss: dismiss)
|
|
.ignoresSafeArea()
|
|
.onAppear {
|
|
try? AVAudioSession.sharedInstance().setCategory(.playback)
|
|
try? AVAudioSession.sharedInstance().setActive(true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct VideoViewControllerRepresentable: UIViewControllerRepresentable {
|
|
let url: URL
|
|
let dismiss: DismissAction
|
|
|
|
func makeUIViewController(context: Context) -> PlayerViewController {
|
|
let controller = PlayerViewController()
|
|
controller.player = AVPlayer(url: url)
|
|
controller.player?.play()
|
|
return controller
|
|
}
|
|
|
|
func updateUIViewController(_ uiViewController: PlayerViewController, context: Context) {}
|
|
} |