У меня есть три URL-адреса и вы должны проверить, есть ли у этих URL-ссылок видео-ссылка. У меня есть ссылка esc, если она не содержит видео в url и воспроизводит видео со следующего URL-адреса. Этот следующий код поможет отслеживать состояние воспроизведения.проверить действительный URL-адрес, чтобы играть в avplayercontroller?
let playerAV = AVPlayerViewController()
var player = AVPlayer()
playerAV.player = player
playerAV.view.frame = CGRectMake(0, 0, self.videoView.frame.width, self.videoView.frame.height)
self.addChildViewController(playerAV)
self.videoView.addSubview(playerAV.view)
playerAV.didMoveToParentViewController(self)
playerAV.player?.play()
addObserverOfMoviePlayer()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ChannelDetailViewController.notificationObserver(_:)), name:AVPlayerItemDidPlayToEndTimeNotification , object: player.currentItem)
_ = UIDevice.beginGeneratingDeviceOrientationNotifications
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ChannelDetailViewController.deviceOrientationDidChange(_:)) , name:
UIDeviceOrientationDidChangeNotification, object: nil)
playerAV.player!.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.New, context: nil)
playerAV.player!.currentItem!.addObserver(self, forKeyPath: "playbackBufferEmpty", options: NSKeyValueObservingOptions.New, context: nil)
playerAV.player!.currentItem!.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: NSKeyValueObservingOptions.New, context: nil)
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "rate" {
if let rate = change?[NSKeyValueChangeNewKey] as? Float {
if playerAV.player!.currentItem!.status == AVPlayerItemStatus.ReadyToPlay{
if rate != 0 && playerAV.player!.error == nil {
print("normal playback")
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ChannelDetailViewController.somAction), userInfo: nil, repeats: true)
}
else{
timer?.invalidate()
print("movie player stopped")
}
}else if playerAV.player!.currentItem?.status == AVPlayerItemStatus.Unknown{
timer?.invalidate()
print("not ready to play")
}
}
}
if keyPath == "playbackBufferEmpty"{
if playerAV.player?.currentItem?.playbackBufferEmpty == true{
timer?.invalidate()
print("movie player stopped due to no buffer")
}
}
if keyPath == "playbackLikelyToKeepUp" {
if playerAV.player?.currentItem?.playbackLikelyToKeepUp == true{
print("movie player playing after enough data in buffer")
playerAV.player?.play()
}
}
}
Вы имеете в виду, мне нужно передать видео url в let assets = AVAsset (URL: myurl) ?? Мне нужно играть с удаленного, а не с локального ... он тоже проверяет удаленный URL? –
Да, это будет работать как для удаленных, так и для этого, пусть активы = AVAsset (URL: myurl), URL будет активным и проверяет его длину, как указано выше. – JAck
Если мой ответ вам поможет, пожалуйста, «Up MArk» – JAck