12

当应用程序启动并将委托设置为 appDelegate 时,我正在设置一个 AVAudioSession。一切似乎都在工作(播放等),除了当电话接到电话时没有调用代表上的 beginInterruption 。当呼叫结束时 endInterruption 正在被调用。

我唯一的想法是我使用的音频播放器代码曾经基于 AVAudioPlayer,但现在使用的是 AVPlayer。用于处理中断的 AVAudioPlayer 委托的回调仍然存在,但它们会以任何方式发生冲突似乎很奇怪。

4

5 回答 5

9

查看标题,在 iOS6 中,看起来 AVAudioSessionDelegate 现在已被弃用。

AVAudioSessionInterruptionNotification在 iOS6 中改用。

更新:那没有用。我认为框架中存在错误。

是的,根据我的经验,beginInterruption 和新记录的 AVAudioSessionInterruptionNotification 都不能正常工作。我必须做的是使用本地标志跟踪播放器的状态,然后处理该endInterruption:withFlags:方法以跟踪中断的恢复。

在 iOS 6 中,从中断中恢复至少会使您的 AudioPlayer 保持在正确的位置,因此我无需存储我的 AVAudioPlayer 的最后已知播放时间,我只需点击播放即可。

这是我想出的解决方案。如果 AVPlayer 驻留时间过长,iOS 6 似乎会通过 Media Reset 杀死您的音频。最终发生的是 AVPlayer 播放,但没有声音出来。AVPlayer 上的速率为 1,但绝对没有声音。更糟糕的是,AVAudioSession setActive 和 AVPlayer 本身都没有错误表明存在问题。

再加上您不能依赖 appWillResignActive 的事实,因为如果您完全依赖远程控制手势,您的应用程序可能已经在后台。

我实现的最终解决方案是在 AVPlayer 上添加一个周期性观察者,并记录最后一次已知时间。当我收到我已获得控制权的事件时,我创建了一个新的 AVPlayer,使用 AVPlayerItem 加载它,并将 seekToTime 设置到适当的时间。

这是一个非常烦人的解决方法,但至少它有效,并且避免了正在发生的周期性崩溃。

于 2012-09-14T21:53:00.943 回答
4

我可以确认使用C api,中断开始时也没有调用中断方法;只有当它结束时

(AudioSessionInitialize (nil, nil, interruptionListenerCallback, (__bridge void *)(self));

我还针对该问题向苹果提交了错误报告。

编辑:这在 iOS 6.1 中已修复(但不是 iOS 6.0.1)

于 2012-10-04T21:49:18.940 回答
2

只需致电:

[[AVAudioSession sharedInstance] setDelegate: self];
于 2013-02-01T19:15:19.677 回答
0

我刚刚通过在 AudioSessionInitialize() 中声明的 AudioSessionInterruptionListener 回调函数中设置断点检查了我的 iPhone 5(运行 iOS 6.0),实际上,当应用程序具有活动的音频会话和音频时,会调用此中断回调单元并被来电打断(Xcode 显示应用程序在中断开始时的断点处停止,然后我从该断点继续)。

我有该应用程序,然后停止其音频单元并停用其音频会话。然后,在结束中断回调时,应用程序重新激活音频会话并重新启动音频单元而没有问题(应用程序随后正确录制音频)。

于 2012-10-31T23:29:46.870 回答
0

AVPlayer我在 iOS 6.0.x 上构建了一个全新的音频流 ( ) 应用程序,发现了同样的问题。

代表现在已弃用,我们必须使用通知,这很好,但这是我的发现:

  1. 在来电期间,我只收到AVAudioSessionInterruptionTypeEnded我的处理程序,以及AVAudioSessionInterruptionOptionShouldResume. 音频会话自动暂停(音频淡出),我只需要恢复播放AVPlayer.
  2. 但是,当尝试启动游戏(例如 CSR Racing)时,奇怪的是,AVAudioSessionInterruptionTypeBegan当我的应用程序可以恢复播放,甚至没有终止游戏时,我会感到恐惧但没有任何迹象。

现在,这可能取决于其他因素,例如我的音频类别(在我的情况下AVAudioSessionCategoryPlayback)和两个应用程序的混合设置(kAudioSessionProperty_OverrideCategoryMixWithOthers),我不确定,但肯定我看到了一些不合适的地方。

希望其他人报告说,在 6.1beta 上,这是修复的,我还需要升级,所以我们拭目以待。

于 2013-01-01T18:22:46.363 回答