问题描述
我正在尝试在视频结束时显示默认的播放图标。作为默认行为,它显示所有其他控件,如第二张图片所示,但我希望播放按钮与第一张图片相同。
我正在使用以下代码。
struct AVPlayerView: UIViewControllerRepresentable {
var videoURL: URL
@State var playerController:AVPlayerViewController?
@State var player:AVPlayer?
func makeUIViewController(context: UIViewControllerRepresentableContext<AVPlayerView>) -> AVPlayerViewController {
let controller = AVPlayerViewController()
controller.player = AVPlayer(url: videoURL)
controller.videoGravity = .resizeAspect
self.player = controller.player
self.playerController = controller
return controller
}
func updateUIViewController(_ uiViewController: AVPlayerViewController,context: UIViewControllerRepresentableContext<AVPlayerView>) {
}
}
我打算在视频结束时重新初始化AVPlayer,但不确定是否正确。
解决方法
这就是我所做的,并且效果很好。
struct AVPlayerView: UIViewControllerRepresentable {
var videoURL: URL
let controller = AVPlayerViewController()
func makeUIViewController(context: UIViewControllerRepresentableContext<AVPlayerView>) -> AVPlayerViewController {
controller.player = AVPlayer(url: videoURL)
controller.videoGravity = .resizeAspect
self.addPeriodicTimeObserver()
return controller
}
func updateUIViewController(_ uiViewController: AVPlayerViewController,context: Context) {
}
func addPeriodicTimeObserver() {
self.controller.player?.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1,preferredTimescale: CMTimeScale(NSEC_PER_SEC)),queue: DispatchQueue.main,using: { (currentTime) in
if let endTime = self.controller.player?.currentItem?.duration {
if currentTime == endTime {
// Reset the player
self.controller.player = AVPlayer(url: self.videoURL)
self.addPeriodicTimeObserver()
}
}
})
}
}