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

现在,我想启用我的设置,使其还支持来自Internet上服务器的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从Internet上的服务器流式传输MP3文件?

    还是我应该为此放弃并使用AVPlayer

    期待您的回音。

    最佳答案

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

    关于ios - 在AVAudioEngine中从网络流传输数据,可以吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30862664/

    10-10 20:46