当应用程序进入后台时,AVPlayer 和 addPeriodicTimeObserverForInterval 不起作用

Posted

技术标签:

【中文标题】当应用程序进入后台时,AVPlayer 和 addPeriodicTimeObserverForInterval 不起作用【英文标题】:AVPlayer and addPeriodicTimeObserverForInterval does not work when app goes to background 【发布时间】:2012-02-26 22:40:26 【问题描述】:

问题 1。 我在 iphone 4 和 ios 5.0.1 上看到以下行为

使用 addPeriodicTimeObserverForInterval 注册以每 250 毫秒接收一次更新并更新 UI。

在应用程序进入后台之前运行良好。例如。点击主页按钮或锁定屏幕,

当应用程序返回前台时,播放器会再次开始播放,但更新不会再次触发。如果用户再次点击 UI 上的播放暂停按钮,则更新开始再次触发。 这也可以在苹果的demo 应用程序中看到。

问题 2

我们不能将基于 C 的音频会话 API 与 AV 基础类混合使用吗?例如。我在 AudioInterruptions 时注册了基于 C 的侦听器。但是当我将 AVPlayer 与 kAudioSessionCategory_PlayAndRecord 一起使用时,它们不会被调用。当应用程序进入后台时,AVPlayer 会暂停,而不会调用基于 C 的侦听器。

这是预期的还是我可以做些什么?请注意,一旦我处理了 AVPlayer 实例并且我的应用程序再次使用 kAudioSessionCategory_PlayAndRecord 进入后台 设置为调用侦听器函数的类别。

【问题讨论】:

您是否注册了远程事件通知并将后台模式设置为应用播放音频? (您还需要将视图控制器设置为第一响应者) 谢谢苏珀。但是您还没有回答我的任何问题:(。我不希望我的应用程序在后台播放并且事实上它是我想要的行为。 【参考方案1】:

对于您的第一个问题,很可能您没有按照建议发布addPeriodicTimeObserverForInterval。尝试在您的 AppDelegate 中添加这样的内容:

- (void)applicationDidEnterBackground:(UIApplication *)application

    [_audioManager.audioPlayer removeTimeObserver:_audioManager.timeObserver];
    _audioManager.isUIActive = NO;

以及重启周期性时间观察器的适当方法:

- (void)applicationDidBecomeActive:(UIApplication *)application

    [_audioManager setUpTransportUI];
    _audioManager.isUIActive = YES;

setUpTransportUI 在哪里重新创建您的时间观察器。

【讨论】:

以上是关于当应用程序进入后台时,AVPlayer 和 addPeriodicTimeObserverForInterval 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?

由于间隙,AVPlayer 流在后台停止 [关闭]

AVPlayer 不在后台转发流媒体轨道

AVPlayer 播放、暂停和缓冲问题

在 iOS 7 和 8 中使用 AVPlayer 进行远程控制

iOS AVPlayer 后台播放问题自动停止问题 防止应用被后台挂起方法