我对 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 触发器,该触发器将我的上下文再次设置为空。
在 iO 3.1 更高版本上,我可以设置 useApplicationAudioSession = NO,并且侦听器永远不会成为开始或结束触发器。但在低于 3.2 的 iOS 上,htis 选项不存在。
但我的主要问题是,为什么我从来没有得到 AudioListenerInterruptionEnd 触发器。
感谢帮助
此致
格奥尔格