2015-12-21 1 views
0

Я пытаюсь воспроизвести Песни из soundcloud. Поскольку iOS-SDK был прекращен, я должен сам выполнить всю аутентификацию и потоковое вещание. При потоковой передаче песни я в основном создаю поток с помощью Alamofire и разбираю полученные данные в экземпляр AVAudioplayer. Затем он воспроизводит звук на секунду и останавливается. Что мне не хватает?AVAudioplayer воспроизводит данные только на секунду

class SoundcloudPlayer: NSObject, AVAudioPlayerDelegate { 

    var clientProvider: SoundcloudConnectorProvider! 
    var track: SoundcloudTrack? 
    private var stream: Request? 
    private var audioData = NSMutableData() 
    private var audioPlayer: AVAudioPlayer! 

    override init() { 
     super.init() 
    } 

    func play(){ 
     if let client = clientProvider?.currentClient() where client.hasUnexpiredAccessToken() && track != nil{ 
      stream = client.request(.GET, self.track!.url!).stream({ (data) -> Void in 
       self.audioData.appendData(data) 
       if self.audioPlayer == nil{ 
        do{ self.audioPlayer = try AVAudioPlayer(data: self.audioData)} catch {print("error") } 
        self.audioPlayer.delegate = self 
        self.audioPlayer.play() 
       } 
       print(self.audioPlayer.data?.length) 
      }).progress({ (read, total, expected) -> Void in 
       Async.main(block: {() -> Void in 
       //print("\(total)/\(expected)") 
       }) 
      }) 
     } 
    } 
} 

ответ

0

Вы не должны использовать AVAudioPlayer, так как он предназначен только для воспроизведения локального файла. Вместо этого вы можете использовать звуковую очередь, чтобы воспроизводить поток аудио или аудиоустройств, API более низкого уровня. Поскольку аудиопоток является «потоком», вы можете попробовать использовать CFReadStream/NSInputStream или Audio File Stream для непрерывного чтения данных, а не просто «получить». Так, например, вы можете использовать CFReadStream + Audio Queue для воспроизведения звука. Это сложно, удачи!

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

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