如何获取 AVPlayer 的中断开始/结束事件

Posted

技术标签:

【中文标题】如何获取 AVPlayer 的中断开始/结束事件【英文标题】:How to get interruption start/end events for AVPlayer 【发布时间】:2013-03-19 15:04:07 【问题描述】:

我正在使用AVPlayer 播放音频文件。 我实现了AVAudiosessionInterruptionNotification

    AVAudioSession *session = [AVAudioSession sharedInstance];
    NSError *errorInAudio   = nil;
    [session setActive:YES error:&errorInAudio];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interruption:) name:AVAudioSessionInterruptionNotification object:nil];

    [session setCategory:AVAudioSessionCategoryPlayback error:nil];

当应用程序处于前台(如语音控制)时出现中断时,它可以正常工作。 但我在后台模式下制作了应用程序并打开了 iPod 播放器并开始播放。当时并没有调用它的中断,即使我的应用程序进入前台也是如此。 可能是什么问题。请帮忙。

【问题讨论】:

【参考方案1】:

如果你使用AVAudioPlayer,你可以遵循AVAudioPlayerDelegate,那么你可以实现类似- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag的方法

更多方法列于docs。

【讨论】:

感谢您的回复。我得到了 AVAudioPlayer 的代表。但我想知道是否有任何方法可以使用 AVPlayer 来实现这一点。你能提出一个想法吗? 我对 AVPlayer 没有太多经验,但这个 SO 问题涵盖了同样的问题:***.com/questions/6837002/… 无论如何我正在将我的 AVPlayer 更改为 AVAudioPlayer。谢谢你的建议。 哈哈很高兴我能帮上忙。快乐编码。 :) 如果您尝试从网络流式传输音频,这将不起作用。【参考方案2】:

要在AVPlayer 在后台中断时收到通知,您可以收听 AudioSession 的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerStopped) name:AVAudioSessionInterruptionNotification object:nil];

【讨论】:

以上是关于如何获取 AVPlayer 的中断开始/结束事件的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 类事件

如何使用 AVPlayer 从数组中选择后播放下一首曲目

iPhone 'Event Kit' - 如何为获取指定额外的搜索过滤器(超过开始/结束日期)?

在事件日志中获取特定任务的开始结束时间

用户关闭 AVPlayer 时如何获取视频播放时间

如何检测 AVPlayer 视频何时结束播放?