视频在SwiftUI中的AVPlayer中结束时如何显示播放按钮

问题描述

我正在尝试在视频结束时显示默认的播放图标。作为默认行为,它显示所有其他控件,如第二张图片所示,但我希望播放按钮与第一张图片相同。

enter image description here

enter image description here

我正在使用以下代码。

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()
                }
            }
        })
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...