我有一个应用程序,我在其中使用 AVAudioEngine
通过 AVAudioPlayerNodes
和 AVAudioFiles
播放本地文件系统中的文件。这工作得很好。
现在我想让我的设置也支持从 Internet 上的服务器流式传输 MP3 文件。
到目前为止我尝试了什么
我希望我可以从指向网络地址的 NSURL
对象创建某种缓冲区,然后我可以将其与我的 AVAudioPlayerNode
一起使用。
我搜索了 Stack Overflow和 internet一般来说,但还没有找到任何关于如何实现这一点的好技巧。
我知道 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 }
这个错误会奖励我:
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/