2016-09-02 1 views
0

У меня есть три 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() 

     } 
    } 
    } 

ответ

5

Просто проверьте длину видео, если это недопустимый длина вернется в ноль с этим кодом:

let assets = AVAsset(URL: NSURL(fileURLWithPath: filePath)) 
let length=Float(assets.duration.value)/Float(assets.duration.timescale) 
if length != 0.0 { 
// play it 
} 

Если у вас есть еще проблема, вы можете спросить меня в любое время.

+0

Вы имеете в виду, мне нужно передать видео url в let assets = AVAsset (URL: myurl) ?? Мне нужно играть с удаленного, а не с локального ... он тоже проверяет удаленный URL? –

+0

Да, это будет работать как для удаленных, так и для этого, пусть активы = AVAsset (URL: myurl), URL будет активным и проверяет его длину, как указано выше. – JAck

+0

Если мой ответ вам поможет, пожалуйста, «Up MArk» – JAck

Смежные вопросы