播放来自 url 的视频并验证是否观看了整个视频

Play a video from url and validate if whole video was watched

我有这个json,我必须播放视频

播放视频并验证或检查用户是否观看了整个视频的最佳方式是什么?
视频可能是(Tiktok - Vimeo - Dayli Motion)视频但不是 Youtube 视频

我尝试使用 AVPlayer 但它不起作用:

    let videoURL = NSURL(string: "https://vimeo.com/601097657")
    let player = AVPlayer(url: videoURL! as URL)
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player
    self.present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }

我认为可能的解决方案是 webView,但我不确定是否可以验证用户是否观看了整个视频

这对我有用。

class Player: AVPlayerViewController {

init(url: URL) {
    super.init(nibName: nil, bundle: nil)
    player = AVPlayer(url: url)
    player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: DispatchQueue.main, using: { time in
        if self.player?.currentItem?.status == .readyToPlay {
            let currenTime = CMTimeGetSeconds((self.player?.currentTime())!)
            let secs = Int(currenTime)
            print(NSString(format: "%02d:%02d", secs/60, secs%60) as String)
        }
    })
}

这将打印出他们在几秒钟内观看了多少视频,然后您可以检查这是否等于视频的总时间。

显然你必须实现方法来检查他们是否跳过了部分视频,但这是另一个问题。

查看更多信息Time watched. and

AVPlayer 会在这种情况下发送通知。

只需订阅您需要的通知即可。在你的情况下你需要

NSNotification.Name.AVPlayerItemDidPlayToEndTime

实现这个看起来像这样:

NotificationCenter.default.addObserver(self,
                                       selector: #selector(itemDidPlayToEnd),
                                       name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                       object: nil)

并实现一个用于处理通知的选择器:

@objc private func itemDidPlayToEnd() { 
    // do smth 
}