AVAudioPlayer 无法在某些设备上播放

Posted

技术标签:

【中文标题】AVAudioPlayer 无法在某些设备上播放【英文标题】:AVAudioPlayer not playing on some devices 【发布时间】:2015-10-07 14:43:50 【问题描述】:

我的代码在运行 ios 9.0.2 的模拟器、iPad-4 和 iPhone 6+ 上运行良好。

但是,我知道这是一个奇怪的说法,在我的 iPad Air 2 上它看起来在工作,但实际上什么也没听到。还在其他设备上重现,例如另一台 iPhone 6+ 和另一台运行 iOS 8.4 的 iPhone 6。我已经创建了一个演示项目(下面的链接),以便其他人可以尝试他们自己的设备。

我正在这样做:

    使用[[NSBundle mainBundle] resourcePath]下的路径初始化NSURL *url:/var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My App.app/sndEfcts/!snap.mp3

    将新对象分配给 ivar:

    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
    

    在调试器中测试 url - 好! (注意空格变成了%20。我也验证了文件存在):

    (lldb) po audioPlayer.url
    file:///var/mobile/Containers/Bundle/Application/0ACADB94-886E-4C7E-A327-3FFF0E54CEF9/My%20App.app/sndEfcts/!snap.mp3`
    

    如果创建成功则播放:

    if (audioPlayer) 
        audioPlayer.delegate = self;
        [audioPlayer prepareToPlay];
        __unused BOOL playOk = [audioPlayer play];
    
    

    完成委托已激活: - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag ......和旗帜说是! - 但什么也没听到 :(

所以看起来一切正常,但仍然听不到任何声音(尽管其他应用程序的其他声音也可以正常工作)

有人知道这种行为的原因吗?

编辑

我创建了一个simple project 来演示。它发生在各种设备上,甚至在 8.4 上。在模拟器上它一直在工作

【问题讨论】:

【参考方案1】:

我找到了解决方案。

在有问题的设备上,“静音”已打开,影响了设备中的一些声音。为防止这种情况,请在您的应用开始时调用它:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

这将导致音频被视为播放,因此不会被静音选项静音。

我了解到,用户通常不知道在哪里可以找到静音开/关控件。在 iPad Air 2 上:从底部抬起下部窗格并按下扬声器图标。

【讨论】:

以上是关于AVAudioPlayer 无法在某些设备上播放的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 在播放视频时无法识别设备静音按钮

AVAudioPlayer 后台任务无法在 iOS 5.0.1 设备上运行,但在 iOS 5 模拟器上运行

iPhone:AVAudioPlayer 并不总是在设备上播放音频

AVAudioPlayer mp3 文件无法播放

在 OSX 上更改 AVAudioPlayer 的输出设备

无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件