2

我对 OpenAl 和 MPMoviePlayerController 的组合有疑问。

我在我的 OpenAl 设置过程中注册了 AudioInterruptionLister。当我开始播放视频时,听众会收到 AudioListenerInterruptionStarts,但是当电影结束时,我没有收到 AudioListenerInterruptionEnd 触发器。

// Register callback for audio interrupts
AudioSessionInitialize(NULL, NULL, &OpenALInterruptionListener, this);

听者

void OpenALInterruptionListener(void *inClientData, UInt32 inInterruptionState) 
{
    OpenAL *oal = (OpenAL *) inClientData;

    if (inInterruptionState == kAudioSessionBeginInterruption) 
    {
        oal->MakeContextNull();
        AudioSessionSetActive(false);
    } 
    else if (inInterruptionState == kAudioSessionEndInterruption) 
    {
        AudioSessionSetActive(true);
       oal->MakeContextCurrent();
    }
}

到目前为止,我的解决方案是在开始电影之前使上下文无效,并在电影结束后使其成为当前状态。这导致了问题,如果用户通过触摸屏幕非常快速地跳过电影,我将上下文设置为当前并且稍微延迟了我得到 AudioListenerInterruptionStart 触发器,它再次将我的上下文设置为空。

在 iOs 更大的 3.1 上,我可以设置 useApplicationAudioSession = NO 并且侦听器永远不会成为开始或结束触发器。但在 iOS 上低于 3.2 htis 选项不存在。

但我的主要问题是,为什么我从来没有得到 AudioListenerInterruptionEnd 触发器。

感谢您的帮助,问候乔治

4

0 回答 0