AVAudioPlayer 在使用 M4A 文件初始化时抛出。 (OSStatus 错误 2003334207。)

Posted

技术标签:

【中文标题】AVAudioPlayer 在使用 M4A 文件初始化时抛出。 (OSStatus 错误 2003334207。)【英文标题】:AVAudioPlayer throws when initializing with M4A file. (OSStatus error 2003334207.) 【发布时间】:2019-07-22 19:40:38 【问题描述】:

我正在尝试从包含 M4A 文件的 URL 初始化和播放 AVAudioPlayer。文件如下:

https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/AudioPreview123/v4/e8/04/59/e80459fb-9429-3323-4f43-ce12d5df1be5/mzaf_5785529815715338950.plus.aac.p.m4a

这是我用来初始化所说的 AVAudioPlayer 的代码:

var player: AVAudioPlayer!
let preview = "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/AudioPreview123/v4/e8/04/59/e80459fb-9429-3323-4f43-ce12d5df1be5/mzaf_5785529815715338950.plus.aac.p.m4a"

func loadAudio() 
    do 
        self.player = try AVAudioPlayer(contentsOf: URL(string: preview!)!, fileTypeHint: AVFileType.m4a.rawValue)
        self.player.play()              
     catch let error 
        print("Error:", error.localizedDescription)                              
    


@IBAction func buttonPressed(_ sender: Any) 
    loadAudio()

当按下与名为 buttonPressed(sender:)IBAction 关联的按钮时,我收到以下错误:

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

我已尝试对有关此错误的类似问题进行故障排除,但似乎没有一个可以解决我的问题。

编辑:

我尝试用AVPlayer 做类似的事情,虽然它没有抛出错误,但文件根本没有播放。下面是一些示例代码:

var avPlayer: AVPlayer!
let preview = "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/AudioPreview123/v4/e8/04/59/e80459fb-9429-3323-4f43-ce12d5df1be5/mzaf_5785529815715338950.plus.aac.p.m4a"

func loadAudio() 
    if let url = NSURL(string: preview!) 
        self.avPlayer = AVPlayer(url: url as URL)
        self.avPlayer.volume = 1.0
        self.avPlayer.play()
    


@IBAction func buttonPressed(_ sender: Any) 
    loadAudio()

【问题讨论】:

AVAudioPlayer 不播放远程文件。你想要一个 AVPlayer。 我尝试用AVPlayer 做类似的事情,当我打电话给player.play() 时播放器根本没有玩。如果有用,我可以添加一些代码。 @马特 我不明白为什么会有用。我将您的代码更改为使用 AVPlayer,它工作正常。 【参考方案1】:

AVAudioPlayers 不播放远程内容。使用 AVPlayer。

var player: AVPlayer!
let preview = ....

func loadAudio() 
    self.player = AVPlayer(url:URL(string: preview)!)
    self.player.play()

【讨论】:

查看我所做的编辑。我尝试使用AVPlayer,但音频根本无法播放。需要注意的是,我实际上是在viewDidLoad() 中调用这个函数,我只是将它放在IBAction 中,以简化此示例。 我的代码在模拟器中运行,在您提供的 URL 处播放文件。我点击按钮,噪音播放。这就是要知道的全部内容。 感谢您的意见。如果我能让这个工作正常,我会告诉你的。【参考方案2】:

我觉得自己像个白痴。运行此代码时,我的手机处于“静音模式”。每this answer我需要添加

do 
        try AVAudiosession.sharedInstance().setCategory(AVAudioSession.Category.playback)
    
    catch 
        // report for an error
    

在真正从 AVPlayer 播放之前。

我没有想到这个问题的原因是,在我的 iPhone 控制中心查看音乐管理器时,没有任何迹象表明正在播放音频。 播放音频并不意味着播放控件由设备的控制中心处理。

【讨论】:

以上是关于AVAudioPlayer 在使用 M4A 文件初始化时抛出。 (OSStatus 错误 2003334207。)的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle 在尝试实例化 AVAudioPlayer 时找到 mp3 文件但没有找到 m4a

AVAudioPlayer initWithContentsOfURL 为 AAC/M4A 文件返回 nil

Swift AVAudioPlayer 不会播放用 AVAudioRecorder 录制的音频

本地文件使用 AVAudioPlayer 播放,但不使用 AVPlayer?

AVAudioPlayer 只用一些文件初始化

OCiOS开发:音频播放器 AVAudioPlayer