Я только что переключился с 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
}
, объявляя наблюдателя, когда я нажимаю игру, почему он автоматически перескакивает на метод наблюдателя при переключении паузы/воспроизведения. – Brosef
это сработало или еще проблема есть? – JAck
Это сработало, просто интересно, почему оригинальный способ, которым я занимался, не работал. – Brosef