在 AVAudioEngine 中从网络流式传输数据,这可能吗?
Posted
技术标签:
【中文标题】在 AVAudioEngine 中从网络流式传输数据,这可能吗?【英文标题】:Stream data from network in AVAudioEngine, is it possible? 【发布时间】:2015-08-31 23:33:14 【问题描述】:我有一个应用程序,我在其中使用 AVAudioEngine
通过使用 AVAudioPlayerNodes
和 AVAudioFiles
播放本地文件系统中的文件。这工作得很好。
现在我想让我的设置也支持从 Internet 上的服务器流式传输 MP3 文件。
到目前为止我所做的尝试
我希望我可以从指向网络地址的 NSURL
对象创建某种缓冲区,然后我可以将其与 AVAudioPlayerNode
一起使用。
我搜索了Stack Overflow 和internet,但没有找到任何关于如何实现此目的的好技巧。
我知道AVAudioEngine
阵容包括:
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
?
期待您的来信。
【问题讨论】:
“或者我应该放弃并使用AVPlayer吗?”是的。 谢谢@TomHarrington。简明扼要:-) 【参考方案1】:Apple 的文档没有说明它是否可以与在线托管的 mp3 一起使用,但是当我尝试使用 mp3 url 初始化 AVAudioFile
时,它会立即崩溃并出现致命异常。我认为这回答了你的问题。
【讨论】:
确实不错。不完全是我希望的答案,但感谢您的时间和回答。以上是关于在 AVAudioEngine 中从网络流式传输数据,这可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 node.js 中从字符串创建一个文本文件并将其作为响应流式传输
如何在具有单独位置 url 和资源 url 的 swift 中从服务器实时流式传输音频?