Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVAudioPlayer.initWithData引发异常_Ios_Swift_Avaudioplayer_Nsdata_Nsurl - Fatal编程技术网

Ios AVAudioPlayer.initWithData引发异常

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()

我正在尝试从远程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()     
      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?
}
我的函数func
returnPathAtSelectedIndex(文件名: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?
}
我的函数func
returnPathAtSelectedIndex(文件名: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,它与我一起工作。如果这对你有帮助,并且查询得到解决,你可以通过接受答案来关闭此线程