2016-10-17 2 views
0

방금 ​​AVAudioPlayer에서 AVPlayer으로 전환했으며 이전 기능을 수행하고 적절한 조정을 수행하고 있습니다. AVPlayer은 URL을 사용하여 원격 오디오 파일을 재생하는 데 사용됩니다. 재생할 파일을 선택하고 모든 작업을 일시 중지하면 완벽하게 작동합니다. 그러나 일시 중지 된 파일 재생을 다시 시작하려면 재생 기능이 호출 된 것을 볼 수 있지만 재생되지 않습니다. 플레이어가 재생을 마쳤을 때 관찰자를 설정하여 재생/일시 중지 버튼을 전환 할 수 있으며 내가 알아챈 점은 일시 정지 한 후에 관찰자가 호출된다는 것입니다. 플레이어가 게임을 제대로 끝내지 않았으므로 이런 일이 발생하지 않아야합니다. 어쨌든, 나는 중단 점을 설정하고 모든 것이 올바르게 호출되고있다. 잠시 후 AVPlayer이 재생을 재개하지 않는 이유는 무엇입니까? 단지 viewDidLoad() 또는 viewWillAppear() 추가 관찰자에 옵저버를 추가AVPlayer가 일시 중지 된 후 재생을 재개하지 않습니다.

var playerItem: AVPlayerItem? 
var newPlayer: AVPlayer? 
var trackIDplaying: Int? 

func playPausePressed(_ sender:UIButton) 
{ 

    if let selectedTrackID = trackIDplaying 
    { 

     do 
     { 

      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
      try AVAudioSession.sharedInstance().setActive(true) 

      if selectedTrackID == track.trackId 
      { 
       //if playing, then pause. If not playing, then play 
       if (self.newPlayer!.rate != 0) 
       { 
        self.newPlayer!.pause() 
        self.isPaused = true 
       } 
       else 
       { 
        if self.newPlayer!.currentItem != nil 
        { 
         self.newPlayer!.play() 
         print(self.newPlayer!.currentItem) 
        } 
       } 
      } 
      else 
      { 
       //If song is playing, switch to new song 
       let trackURL = URL(string: track.preSignedURL!) 
       trackIDplaying = track.trackId 
       self.playerItem = AVPlayerItem(url: trackURL!) 
       NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem) 
       self.newPlayer = AVPlayer(playerItem: self.playerItem!) 
       self.newPlayer!.play() 
      } 
     } 
     catch let error1 as NSError 
     { 
      error = error1 
      self.newPlayer = nil 
     } 
    } 
    else 
    { 
     do 
     { 
      //play selected song if no other songs are playing 
      let trackURL = URL(string: track.preSignedURL!) 
      print(trackURL!) 
      self.playerItem = AVPlayerItem(url: trackURL!) 
      NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem) 

      self.newPlayer = AVPlayer(playerItem: self.playerItem!) 
      self.newPlayer!.play() 
      self.trackIDplaying = track.trackId 
     } 
    } 
    if let err = error 
    { 
     print("audio player error \(err.localizedDescription)", terminator: "") 
    } 
} 

func playerDidFinishPlaying(note: NSNotification) { 

    guard let indexPath = self.playingAudioIndexPath, let cell = self.audioTable.cellForRow(at: indexPath) as? AudioCell else { 

     return; 
    } 

    cell.playButton.isSelected = false 
    self.playingAudioIndexPath = nil 

} 

답변

1

시도는 단지 문제의이 종류를 한 번에 수행해야합니다. 아직 어떤 문제가 있어도 언제든지 물어보십시오.

+0

재생을 클릭 할 때 관찰자를 선언하면 일시 중지/재생을 전환 할 때 자동으로 관찰자 방법으로 점프하는 이유는 무엇입니까? – Brosef

+0

그것이 작동했거나 여전히 문제가 있습니까 ?? – JAck

+0

원래 일하는 방식이 왜 작동하지 않는지 궁금해했습니다. – Brosef

관련 문제