10

我有一个应用程序,用于通过使用和AVAudioEngine播放本地文件系统中的文件。这工作得很好。AVAudioPlayerNodesAVAudioFiles

现在我想让我的设置也支持从 Internet 上的服务器流式传输 MP3 文件。

到目前为止我尝试过的

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

我已经搜索了Stack Overflow和一般的互联网,但没有找到任何关于如何实现这一点的好技巧。

我知道AVAudioEngine阵容包括:

  • AVAudioPlayerNode,它可以播放来自AVAudioFile或 的音频AVAudioBuffer。我今天已经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为此使用?

期待您的回音。

4

1 回答 1

0

Apple 的文档没有指定它是否可以与在线托管的 mp3 一起使用,但是一旦我尝试AVAudioFile使用 mp3 url 初始化它,它就会立即崩溃并出现致命异常。我认为这回答了你的问题。

于 2015-10-08T20:15:32.163 回答