在AVAudioEngine中从网络流式传输数据,是否可能?

时间:2015-06-16 08:41:29

标签: ios objective-c macos swift avaudioengine

我有一个应用程序,我使用AVAudioEngine来使用AVAudioPlayerNodesAVAudioFiles来播放本地文件系统中的文件。这完全没问题。

现在我想启用我的设置,也支持从互联网上的服务器流式传输MP3文件。

到目前为止我尝试了什么

我希望我可以从指向网络地址的NSURL个对象创建某种缓冲区,然后我可以将其用于AVAudioPlayerNode

我一直在搜索Stack Overflowinternet,但没有找到任何有关如何实现这一目标的好建议。

我知道AVAudioEngine阵容包括:

  • AVAudioPlayerNode,可以播放来自AVAudioFileAVAudioBuffer的音频。我已经将AVAudioFile用于我的"本地文件设置"今天。
  • AVAudioFile,用于本地文件。一个' AVAudioFile'是用NSURL'创建的。所以我尝试使用指向服务器上的MP3文件的URL,就像在Playground中一样:

    var fileError: NSError? = nil
    let file = AVAudioFile(forReading: someURL, error: &fileError)
    if fileError != nil {
        fileError
    }
    

这会给我带来这个错误:

Error Domain=com.apple.coreaudio.avfaudio Code=2003334207 "The operation couldn’t be completed. (com.apple.coreaudio.avfaudio error 2003334207.)" UserInfo=0x7fbfab424480 {failed call=ExtAudioFileOpenURL((CFURLRef)fileURL, &_extAudioFile)}
  • AVAudioPCMBuffer,这是我希望使用的类,但我找不到用数据实例化的方法。

我的问题(只是为了说清楚: - ))

你们中的任何一个聪明人都知道如何使用AVAudioEngine从互联网服务器上传输MP3文件吗?

或者我应该放弃并使用AVPlayer吗?

期待您的回音。

1 个答案:

答案 0 :(得分:0)

Apple的文档没有说明它是否可以与在线托管的mp3一起使用,但是当我尝试使用mp3网址初始化AVAudioFile时,它会立即崩溃并发生致命异常。我认为这回答了你的问题。