gpt4 book ai didi

iphone - MPMoviePlayerController 和 AVAudioPlayer 音频混合故障

转载 作者:行者123 更新时间:2023-12-03 18:19:00 25 4
gpt4 key购买 nike

我正在为 iPhone 开发一个交互式故事书类型的应用程序,最近我遇到了一个与设备上的音频混合有关的令人沮丧的错误。

首先,我设置了一个 Audio Session 。我将类别设置为 AVAudioSessionCategoryAmbient,然后初始化并播放我的 AVAudioPlayer 实例。现在,在后台播放音频时,我使用 MPMoviePlayerController 预加载要播放的视频,然后调用 prepareToPlay。我以这种方式预加载视频的原因是因为我需要它稍后在提示时以相当严格的时间立即播放。

在此配置中,音频/电影工作正常,它们混合并且不会互相干扰。然而,这个特定的 Audio Session 类别不允许音频在设备锁定时继续播放,这是我真正需要的功能。因此,我被迫考虑不同的类别:AVAudioSessionCategoryPlayback

默认情况下,此类别不允许与其他音频混合,according to the Apple docs 。为了启用与其他音频的混合,我将覆盖相关类别:

OSStatus propertySetError = 0;
UInt32 setProperty = 1;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty);
assert(propertySetError == 0);

不幸的是,这解决了我在锁定时播放的问题,但引入了另一个问题:当视频加载时出现轻微卡顿时,AVAudioPlayer 音频会短暂中断。停顿很小,可能不到一秒,但足以破坏用户体验。我读过this related post这使我能够使用 AVAudioSessionCategoryAmbient 预加载视频,但不幸的是,相同的方法似乎不适用于新类别。

根据返回码, Audio Session 类别应用成功。有谁知道为什么使用此类别启用音频混合与环境类别提供的混合设施不同?

最佳答案

我发现解决类似问题的最佳方法是使用较新的 AVPlayer (+1 @adam) 并将您的应用设置为启用背景音频并接收远程控制通知。 @MarquelV 在 How can you play music from the iPod app while still receiving remote control events in your app? 之后向我透露了这一点

如果您可以让后台正常工作,那么您应该可以在设备锁定时继续玩游戏。哦,别忘了向 info.plist 添加键,这很容易做到,但不知道为什么它不起作用。

关于iphone - MPMoviePlayerController 和 AVAudioPlayer 音频混合故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com