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

pbo*_*dsk 9 macos objective-c ios swift avaudioengine

我有一个应用程序,我用它AVAudioEngine来使用AVAudioPlayerNodes和从本地文件系统播放文件AVAudioFiles.这完全没问题.

现在我想让我的设置也支持从互联网上的服务器流式传输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
    }
    
    Run Code Online (Sandbox Code Playgroud)

这会给我带来这个错误的回报:

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)}
Run Code Online (Sandbox Code Playgroud)
  • AVAudioPCMBuffer,这是我希望使用的类,但我找不到用数据实例化它的方法.

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

那些有光明的人知道如何使用AVAudioEngine从互联网上的服务器流式传输MP3文件吗?

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

期待您的回音.

Ore*_*ren 1

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

  • 这样做是对的。不完全是我想要的答案,但感谢您的时间和回答。 (2认同)