2015-06-21 3 views
1

Я пытаюсь использовать AVPlayer для воспроизведения аудио с внешнего URL-адреса (.mp3 файлов, хранящихся в Amazon S3).AVPlayer seekToTime играет с начала

Я могу заставить проигрывателя играть и прекращать звук отлично, но когда я пытаюсь его возобновить, он запускается каждый раз с самого начала.

Мой код для воспроизведения/паузы и резюме являются следующие

func playAudio(index: Int) { 
    if(self.currentAudioIndex == index) { 
     self.resumePlayback() 
    } 

    self.currentAudioIndex = index; 
    let selectedAudio = self.audios[index] 
    let url = selectedAudio.url! 
    self.playerItem = AVPlayerItem(URL:NSURL(string:url)) 
    self.player = AVPlayer(playerItem:self.playerItem) 
    self.player.rate = 1.0; 
    self.player.play() 
} 

func pauseAudio(index: Int) { 
    if(self.currentAudioIndex != index) { 
     return 
    } 

    self.playerLastTime = self.player.currentTime() 
    self.player.pause() 
} 

func resumePlayback() { 
    let timeScale = self.player.currentItem.asset.duration.timescale; 
    let seconds = CMTimeGetSeconds(self.playerLastTime!) 
    let time = CMTimeMakeWithSeconds(seconds, timeScale) 
    self.player.seekToTime(time, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
    self.player.play() 
} 

Любая помощь будет принята с благодарностью!

+0

Одна вещь что если я вызываю вызов resumePlayback() в конце функции pauseAudio, ЭТО РАБОТАЕТ ... Я просто не могу понять, что здесь не так – asheinfeld

+0

вы пробовали просто игнорировать все пользовательские возобновления и просто называть 'play' снова ? По крайней мере, это работает для меня;) просто есть resumePlayback() call self.player.play() – luk2302

+0

Одна вещь, которую следует учитывать, - это то, что поиск требует времени. Существует метод 'seekToTime: toleranceBefore: toleranceAfter: completeHandler:', чтобы вы могли начать игру после окончания поиска. – matt

ответ

0

Ха-ха! Я только что узнал ответ сегодня, я, должно быть, действительно устал.

В основном я пропускал инструкцию возврата в заявлении, если внутри функции воспроизведения

if(self.currentAudioIndex == index) { 
    self.resumePlayback() 
    return //This was missing 
} 

Так что случилось, что звук был загружен снова :)

Cheers,

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