2017-04-13 4 views
0

사용자 정의 컨트롤이있는 비디오를 재생할 UI가 있습니다.동영상이 일시 중지되는 대신 처음부터 멈추고 재생됩니다. 빠른 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을 설정하십시오. else 조건에 stopPlayback을 넣어두면 작동합니다. –

답변

0

단추를 누를 때마다 videoPlayerItem을 바꿉니다. 그것이 재설정하는 이유입니다 :

관련 문제