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

10
我有一个应用程序,其中使用AVAudioEngine通过AVAudioPlayerNodesAVAudioFiles从本地文件系统播放文件。这很完美。

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

到目前为止我尝试过的

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

我已经在Stack Overflowinternet上进行了搜索,但没有找到任何关于如何实现此目标的好提示。

我知道AVAudioEngine系列包括:

  • AVAudioPlayerNode, which can play audio from an AVAudioFile or a AVAudioBuffer. I already use AVAudioFile for my "local file setup" today.
  • AVAudioFile, which is to be used for local files. An 'AVAudioFile' is created with an 'NSURL' so I've tried with an URL that points to a MP3 file on a server like so in a 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
是的。我应该放弃并使用AVPlayer吗? - Tom Harrington
感谢@TomHarrington。简短明了 :-) - pbodsk
1个回答

1

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


2
它是正确的。虽然不完全是我所希望的答案,但感谢您花费时间并回答我的问题。 - pbodsk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接