首页 文章

AVAudioSessionDelegate在endInterruption处调用,但未调用beginInterruption

提问于
浏览
12

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

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

5 回答

  • 4

    查看 Headers ,在iOS6中,看起来AVAudioSessionDelegate现在已被弃用 .

    在iOS6中使用 AVAudioSessionInterruptionNotification .

    更新:这不起作用 . 我认为框架中存在一个错误 .

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

    使用iOS 6,从中断恢复将至少使您的AudioPlayer保持在正确的位置,因此我无需存储我的AVAudioPlayer的最后已知播放时间,我只需要播放 .

    这是我提出的解决方案 . 如果AVPlayer驻留时间太长,iOS 6似乎会通过媒体重置来杀死您的音频 . 最终发生的事情是AVPlayer播放,但没有声音出来 . AVPlayer的速率是1,但绝对没有声音 . 为了增加这种情况的痛苦,AVAudioSession setActive和AVPlayer本身都没有错误,表明存在问题 .

    此外,您不能依赖appWillResignActive这一事实,因为如果您依赖远程控制手势,您的应用可能已经在后台 .

    我实现的最终解决方案是在AVPlayer上添加一个定期观察器,并记录最后的已知时间 . 当我收到我已经给予回控制的事件时,我创建一个新的AVPlayer,用AVPlayerItem加载它,并将seekToTime加载到适当的时间 .

    这是一个非常烦人的解决方法,但至少它可以工作,并避免发生的周期性崩溃 .

  • 2

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

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

    我还为此问题向苹果提交了一份错误报告 .

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

  • 0

    只需致电:

    [[AVAudioSession sharedInstance] setDelegate: self];
    
  • 0

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

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

  • 8

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

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

    • 在来电期间,我的处理程序中只有 AVAudioSessionInterruptionTypeEndedAVAudioSessionInterruptionOptionShouldResume . 音频会话自动暂停(音频淡入淡出),我只需要恢复 AVPlayer 的播放 .

    • 然而,当尝试启动游戏时,例如CSR Racing,我奇怪地得到了可怕的 AVAudioSessionInterruptionTypeBegan 但当我的应用程序可以恢复播放时没有任何迹象,甚至没有杀死游戏 .

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

    希望其他人报告说,在6.1beta这是固定的,我还需要升级,所以我们会看到 .

相关问题