我对 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 触发器。
感谢您的帮助,问候乔治