Мне интересно, действительно ли следующий способ является лучшим способом узнать, когда видео готово к воспроизведению: в настоящее время я if currentMedia.playerQueue?.status.rawValue == 1 {
играю, else
(видео еще не загружено). Я покажу значок загрузки.а затем выполните следующие действия, чтобы определить, когда видео будет готово к воспроизведению:
Я создаю AVPlayer, используя тот же URL-адрес видео, а затем, когда он будет готов, я вызову метод playCurentMedia () для воспроизведения vid.
currentMedia.avPlayer = AVPlayer(url: currentMedia.videoURL!)
currentMedia.avPlayer!.addObserver(self, forKeyPath: "status", options: [.new, .initial], context: &P2SheetViewController.playerStatusContext)
Есть ли у этой стратегии какие-либо недостатки?Или это хорошее решение?
Как я могу наблюдать за изменениями, чтобы я мог показать видео, когда оно будет готово?
В настоящее время ятолько в состоянии настроить AVPlayer рядом с очередью, чтобы я мог наблюдать за его изменением ...
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("observe KVO")
// Only handle observations for the playerItemContext
guard context == &P2SheetViewController.playerStatusContext else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
return
}
if keyPath == #keyPath(AVPlayer.status) {
let status: AVPlayer.Status
if let statusNumber = change?[.newKey] as? NSNumber {
status = AVPlayer.Status(rawValue: statusNumber.intValue)!
} else {
status = .unknown
}
//Switch over status value
switch status {
case .readyToPlay:
print("READY TO PLAY")
GlobalSharedData.shared.videoAllSetToGoMedia1 = true
if GlobalSharedData.shared.p2Media1VideoWasNotReadyWhenPressedView {
baseVC.playVideoControlForP2()
}
break
// Player item is ready to play.
case .failed:
print(".UKNOWN")
break
// Player item failed. See error.
case .unknown:
print(".UKNOWN")
break
// Player item is not yet ready.
}
}
}