ios - AVAudioPlayer 不开始在后台播放

标签 ios avaudioplayer audiosession

我正在使用 AVAudioPlayerNSFileHandle 进行音频流。基本思路是将流式音频数据保存到具有文件系统的设备中,然后使用 AVAudioPlayer 播放刚刚保存的文件。 AVAudioPlayer 仍然可以播放该文件,即使流媒体正在进行中。

我有一个 UIButton 来开始流式传输/下载。当下载的数据累积到一定数量的Bytes时,AVAudioPlayer会自动播放(触发AVAudioPlayer的"play"方法)。我的问题是:我点击按钮开始流式传输/下载,然后很快按下 iPhone 的主页按钮,让我的应用程序进入后台。下载继续在后台运行,但 AVAudioPlayer 的“play”方法返回“NO”,这意味着“play”方法不播放音频。

我在音频播放器的初始化方法中添加了AVAudioSession相关代码:

- (id) initWithURL:(NSString *) downloadedMusicURL
{
    if ((self = [super init]))
    {       
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

        CFURLRef url = CFURLCreateWithFileSystemPath (NULL, (CFStringRef)downloadedMusicURL, kCFURLPOSIXPathStyle, FALSE);

        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:CFBridgingRelease(url) error:nil];

        AVAudioSession *session = [AVAudioSession sharedInstance];
        [session setActive:YES error:nil];
        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    }

    return self;
}

同样在 info.plist 中,我为键“Required background modes”添加了一个项目“App plays audio”。但是,“播放”仍然无法在后台正确调用。我还错过了什么?非常感谢。

最佳答案

您的应用无法在后台开始播放音频。这是有道理的。想一想如果用户没有积极使用的应用程序突然开始发出声音,设备会是什么样子!请记住,对于用户来说,将应用程序发送到后台与退出该应用程序是天真的等价物。您的应用绝不能像僵尸一样死而复生并开始制造噪音!

后台音频设置允许您的应用在前台产生音频继续当它然后进入的背景。然后它可以继续负责音频(如果它接收到远程事件)直到其他应用程序发出声音;之后,您的应用将再次停止运行,直到它被带到前台并发出声音。

因此,如果您想让它正常工作,您需要在您的应用进入后台之前开始播放一些声音。

关于ios - AVAudioPlayer 不开始在后台播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564298/

相关文章:

iphone - AudioServicesPlaySystemSound 和 AVAudioPlayer 可以混用吗?

ios - 麦克风输入到 iOS 中的扬声器输出?

iphone - 在 iPhone 中播放蜂鸣声与频率和分贝相关

ios - 如果类别 kAudioSessionCategory_PlayAndRecord 处于事件状态,AudioSession SetActive(true) 会立即停止 iPod 播放器

iphone - 路由 iPhone 音频声音

ios - Swift UI 测试,如何检查单元格是否有 ImageView

iOS SDK 在应用程序加载时获取剪贴板文本

iOS 回合制匹配,推送通知不起作用,GKTurnBasedEventListener 函数未调用

ios - 在哪里可以找到有关 iOS 应用程序中安全网络的教程?

ios - setPreferredInput WithBlueTooth 不起作用