2017-04-13 12 views
0

私はカスタムコントロールでビデオを再生しているuiViewを持っています。動画は一時停止ではなく、最初から停止して再生されます。AVPlayer

私はビデオを一時停止すると、それはビデオの冒頭に行き、代わりにその特定のフレームで

を一時停止後の一時停止は、私がでのVideoPlayerを設定しています私のコード

func playButtonTapped(cell: ViewTableCell) { 
     guard let indexPath = self.tableView.indexPath(for: cell) else { 
      return 
     } 
     let url = Bundle.main.path(forResource:ArtistFeeds.sharedInstance.videoFeeds[indexPath.row].videoUrl, ofType:"mp4") 

     let path = NSURL.fileURL(withPath: url!) 
     currentCell = tableView.cellForRow(at: indexPath) as! ViewTableCell 
     currentCell.videoPlayerItem = AVPlayerItem.init(url: path) 

     let playImage = UIImage(named: "image_video_play") as UIImage? 
     let pauseImage = UIImage(named: "image_video_pause") as UIImage? 
     if currentCell.avPlayer?.rate == 1.0 { 
      currentCell.stopPlayback() 
      currentCell.playButton.isHidden = false 
      currentCell.playButton.setImage(playImage, for: .normal) 

     } else { 
      currentCell.startPlayback() 
      currentCell.playButton.isHidden = true 
      currentCell.playButton.setImage(pauseImage, for: .normal) 
     } 

    } 

ですViewTableCellクラス問題は、再生ボタン「currentCell.videoPlayerItem = AVPlayerItem.init(URL:パス)」をクリックするだけで、すべての上にある

var avPlayer: AVPlayer? 
    var avPlayerLayer: AVPlayerLayer? 
    var videoPlayerItem: AVPlayerItem? = nil { 
     didSet { 

      avPlayer?.replaceCurrentItem(with: self.videoPlayerItem) 
     } 
    } 
    @IBAction func playButtonAction(_ sender: UIButton) { 
     self.delegate?.playButtonTapped(cell: self) 
    } 


    func setupMoviePlayer(){ 
     self.avPlayer = AVPlayer.init(playerItem: self.videoPlayerItem) 
     avPlayerLayer = AVPlayerLayer(player: avPlayer) 
     avPlayerLayer?.videoGravity = AVLayerVideoGravityResizeAspect 
     avPlayer?.volume = 3 
     avPlayer?.actionAtItemEnd = .none 
     avPlayerLayer?.frame = videoView.bounds 
     self.backgroundColor = .clear 
     videoView.layer.insertSublayer(avPlayerLayer!, at: 0) 

     let interval = CMTime(value: 1, timescale: 2) 
     avPlayer?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using :{ (progressTime) in 
      let seconds = CMTimeGetSeconds(progressTime) 

      if let duration = self.avPlayer?.currentItem?.duration{ 
       let durationSeconds = CMTimeGetSeconds(duration) 
       self.videoSlider.value = Float(seconds/durationSeconds) 
      } 
     }) 

    } 

    func stopPlayback(){ 
     self.avPlayer?.pause() 
    } 
    func startPlayback(){ 
     self.avPlayer?.play() 
    } 

を次のように私はVideoPlayerItemの代わりに呼び出されています。 その特定のフレームでビデオを一時停止し、ビデオの先頭に戻ってはなりません。

どうすればこの問題を解決できますか。どんな助けもありがとう。

+0

ビデオプレーヤーのレートは0になります。そして、あなたは1のレートでstopPlaybackを設定します.stopPlaybackをelse条件に入れると動作します。 –

答えて

0

ボタンを押すたびにvideoPlayerItemを置き換えます。だからそれはリセットされます:

関連する問題