Ios AVAudioPlayer.initWithData引发异常
我正在尝试从远程URL播放音频Ios AVAudioPlayer.initWithData引发异常,ios,swift,avaudioplayer,nsdata,nsurl,Ios,Swift,Avaudioplayer,Nsdata,Nsurl,我正在尝试从远程URL播放音频 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()
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")
}
我的服务器上有一个音频url列表对于某些音频我能够获得数据
,但在AVAudioPlayer的init方法中,它抛出了错误。我无法得到这件事的真正原因
我可以选择
AVPlayer
,但是为什么这个东西会导致这个问题呢?只要直接从你的URL播放音频就可以了
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?
}
我的函数funcreturnPathAtSelectedIndex(文件名:String)->URL
返回一个URL
编辑
当AVAudioPlayer播放保存到本地的文件时。您需要将文件保存到本地,然后
AVAudioPlayer.init(contentsOf:localFileUrl)
将有助于播放文件,不会产生崩溃 直接从URL播放音频即可
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?
}
我的函数funcreturnPathAtSelectedIndex(文件名:String)->URL
返回一个URL
编辑
当AVAudioPlayer播放保存到本地的文件时。您需要将文件保存到本地,然后
AVAudioPlayer.init(contentsOf:localFileUrl)
将有助于播放文件,不会产生崩溃 请将您的代码更改为此,以便您可以了解发生的错误类型:
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)
}
请将您的代码更改为此,以便您可以了解发生的错误类型:
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)
}
我尝试了下面的代码,它的工作很好
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")
}
我尝试了下面的代码,它的工作很好
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")
}
在调试本地化描述之后,我得到了错误
无法完成该操作。(OSStatus错误1954115647。)
下面的链接帮助我解决了我的问题
不是用NSData对象初始化音频播放器,
将文件保存到Documents文件夹,然后初始化
使用文件URL的播放器
在调试本地化描述之后,我得到了错误
无法完成该操作。(OSStatus错误1954115647。)
下面的链接帮助我解决了我的问题
不是用NSData对象初始化音频播放器,
将文件保存到Documents文件夹,然后初始化
使用文件URL的播放器
是的,它适用于大多数url,但我们正在使用一些导致问题的音频丛林url。或者,如果您想尝试使用导致问题的特定url-是,它适用于大多数url,但我们使用的一些音频丛林url会导致问题。或者,如果您想尝试使用导致问题的特定url-是的,只是这样做并了解问题。是的,刚刚做了,我知道了问题所在。我以后必须使用该音频文件,因此必须将音频下载到
数据中。您可以将下载过程作为单独的线程进行管理,就像后台下载一样,URL可以作为一个线程来播放文件,并使用URL的数据作为单独的线程,所以负载不会只在一个控制器上,希望你明白我的意思是的,我尝试了本地音频文件URL,它与我一起工作。如果这对你有帮助,并且查询得到解决,你可以通过接受回答关闭此线程。我以后必须使用该音频文件,因此必须将音频下载到数据中。你可以作为单独的线程管理下载过程,像后台下载一样,URL可以作为一个线程来播放文件,并使用URL的数据作为单独的线程,所以加载不会只在一个控制器上,希望你明白我的意思。是的,我尝试了本地音频文件URL,它与我一起工作。如果这对你有帮助,并且查询得到解决,你可以通过接受答案来关闭此线程