2016-09-02 2 views
0

私は3つのURLを持っており、これらのURLに再生するビデオリンクがあるかどうかを確認する必要があります。私はそれがURLにビデオを含んでいないと、次のURLからビデオを再生する場合、リンクをescする必要があります。次のコードは、再生状態を追跡するのに役立ちます。avplayercontrollerで再生する有効なURLを確認しますか?

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

私はlet assets = AVAsset(URL:myurl)でビデオURLを渡す必要があることを意味しますか?私は遠隔地からではなく、遠隔地からも遊ぶ必要があります。遠隔地のURLもチェックしていますか? –

+0

ええそれは両方のリモートのためだけにこれを行う資産を= AVAsset(URL:myurl)URLは資産と上記のようにそれの長さを確認します。 – JAck

+0

私の答えが「MArkをアップしてください」と助けてくれる場合 – JAck

関連する問題