我正在尝试播放来自远程网址的音频。
let audioData = try! Data.init(contentsOf: URL)
do
{
self.audioPlayer = try AVAudioPlayer.init(data: data) //Throwing error sometimes
self.audioPlayer?.delegate = self
self.audioPlayer?.prepareToPlay()
self.audioPlayer?.play()
}
catch {
showErrorMessage("An error occurred while trying to extract audio file")
}
我的服务器上有一个音频网址列表。某些音频的 我可以获得Data
但是在AVAudioPlayer的init方法中它会抛出错误。我无法得到实际原因。
我可以选择AVPlayer
,但为什么会出现此问题?
答案 0 :(得分:2)
直接播放音频来自您的网址
do
{
try Manager.player = AVAudioPlayer.init(contentsOf: returnPathAtSelectedIndex(fileName: fileName))
//Set required delegates and Values
Manager.player?.delegate = self
Manager.player?.volume = 1.0
Manager.player?.prepareToPlay()
Manager.player?.play()
}
catch
{
print("Error while playing music: \(error.localizedDescription)")
}
我的播放器
struct Manager
{
///AVAudio Player
static var player: AVAudioPlayer?
}
我的函数func returnPathAtSelectedIndex(fileName:String) -> URL
返回URL
。
修改强>
当AVAudioPlayer播放保存到本地的文件时。您需要将文件保存到本地而不是
AVAudioPlayer.init(contentsOf:localFileUrl)
将有助于播放该文件并且无法生成崩溃。
答案 1 :(得分:1)
请将您的代码更改为此,以便您了解更多正在发生的错误:
let audioData = try! Data.init(contentsOf: URL)
do {
self.audioPlayer = try AVAudioPlayer.init(data: data) //Throwing error sometimes
self.audioPlayer?.delegate = self
self.audioPlayer?.prepareToPlay()
self.audioPlayer?.play()
}
catch let error {
print(error.localizedDescription)
showErrorMessage(error.localizedDescription)
}
答案 2 :(得分:0)
我通过下面的代码尝试它并且工作正常
let audioData = try! Data.init(contentsOf: url)
do
{
let audioPlayer = try AVAudioPlayer.init(data: audioData) //Throwing error sometimes
audioPlayer.delegate = self as? AVAudioPlayerDelegate
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print("An error occurred while trying to extract audio file")
}
答案 3 :(得分:0)
调试本地化描述后,我收到了错误
The operation couldn’t be completed. (OSStatus error 1954115647.)
及以下链接帮助我解决了我的问题。
https://stackoverflow.com/a/5252724/5227570
而不是使用NSData对象初始化音频播放器, 将文件保存到Documents文件夹,然后初始化 具有文件URL的播放器