2016-10-17 6 views
0

Я только что переключился с AVAudioPlayer на AVPlayer, и я просматриваю свои старые функции и внося соответствующие корректировки. AVPlayer используется для воспроизведения удаленных аудиофайлов с использованием URL. Когда я выбираю файл для воспроизведения и пауза, все работает отлично. Однако, когда я хочу возобновить воспроизведение приостановленного файла, плеер не будет играть, хотя я вижу, что функция воспроизведения вызывается. Я установил наблюдателя, чтобы узнать, когда игрок будет играть, поэтому кнопка воспроизведения/паузы может переключаться, и я заметил, что наблюдателя вызывают после того, как я нажал паузу. Этого не должно быть, потому что игрок не играл правильно? В любом случае, я установил точки останова, и все правильно называется. Любая идея, почему AVPlayer не возобновит воспроизведение после паузы?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

попробуйте добавить наблюдателя лишь viewDidLoad() или viewWillAppear() добавление наблюдателя должна производиться только в одно время для такого рода проблем. Все еще у вас возникли проблемы, не стесняйтесь спрашивать меня.

+0

, объявляя наблюдателя, когда я нажимаю игру, почему он автоматически перескакивает на метод наблюдателя при переключении паузы/воспроизведения. – Brosef

+0

это сработало или еще проблема есть? – JAck

+0

Это сработало, просто интересно, почему оригинальный способ, которым я занимался, не работал. – Brosef

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

  • Нет связанных вопросов^_^