代码之家  ›  专栏  ›  技术社区  ›  Bindiya

AVAudioPlayer。initWithData引发异常

  •  0
  • Bindiya  · 技术社区  · 7 年前

    我正在尝试从远程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列表。 对于一些音频 我可以得到 Data 但在AVAudioPlayer的init方法中,它抛出了错误。我无法得到这件事的真正原因。

    我可以选择 AVPlayer 但为什么这件事会导致这个问题呢?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Bindiya    7 年前

    直接从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(fileName:String) -> URL 返回a URL

    编辑

    当AVAudioPlayer播放保存到本地的文件时。您需要将文件保存到本地,然后

    AVAudioPlayer。init(内容:localFileUrl)

    将有助于播放文件,不会产生崩溃。

        2
  •  2
  •   A.Munzer    7 年前

    我按下面的代码进行了尝试,效果很好

      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
  •  1
  •   Vicente Garcia    7 年前

    请将您的代码更改为此,以便您可以了解发生的错误类型:

    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)
    
    }
    
        4
  •  0
  •   Bindiya    6 年前

    调试本地化描述后,我发现了错误

    The operation couldn’t be completed. (OSStatus error 1954115647.)

    下面的链接帮助我解决了我的问题。

    https://stackoverflow.com/a/5252724/5227570

    而不是使用NSData对象初始化音频播放器, 将文件保存到Documents文件夹,然后初始化 具有文件URL的播放器