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

Posted

技术标签:

【中文标题】在 AVAudioEngine 中从网络流式传输数据,这可能吗?【英文标题】:Stream data from network in AVAudioEngine, is it possible? 【发布时间】:2015-08-31 23:33:14 【问题描述】:

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

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

到目前为止我所做的尝试

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

我搜索了Stack Overflow 和internet,但没有找到任何关于如何实现此目的的好技巧。

我知道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

期待您的来信。

【问题讨论】:

“或者我应该放弃并使用AVPlayer吗?”是的。 谢谢@TomHarrington。简明扼要:-) 【参考方案1】:

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

【讨论】:

确实不错。不完全是我希望的答案,但感谢您的时间和回答。

以上是关于在 AVAudioEngine 中从网络流式传输数据,这可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中从服务器流式传输 mp3 文件

在 node.js 中从字符串创建一个文本文件并将其作为响应流式传输

如何在具有单独位置 url 和资源 url 的 swift 中从服务器实时流式传输音频?

如何使用 AVAudioEngine 取消或消除回声/重复声音?

尝试通过多点连接将音频从麦克风流式传输到另一部手机

将音频流式传输到本地网络