在后台媒体播放期间响应MPMoviePlayerController通知

red*_*sky 6 iphone mpmovieplayercontroller multitasking ios avplayer

我有一个应用程序,它从网络流式传输视频并使用MPMoviePlayerController对象播放它,以便在设备上或通过AirPlay播放.

该应用程序支持后台操作,并UIBackgroundModes在其plist文件中的必需键中列出了"audio"选项.

通过AirPlay播放时,应用程序可以成功推送到后台,视频继续正常播放.到现在为止还挺好.

根据Apple文档:

包括音频键告诉系统框架他们应该继续播放并以适当的间隔对应用程序进行必要的回调.如果应用程序不包含此键,则当应用移动到后台时,应用播放的任何音频都会停止.

但是,这些回调没有进行.

该应用程序使用两种类型的回调:与通知相关联的回调MPMoviePlayerController以及AVPlayer基于计时器的回调,这些回调监视回放位置和性能统计数据以进行监控.

纵观苹果的笔记,我当然希望收到的第一类型的回调,从而使应用程序可以响应MPMoviePlayerPlaybackStateDidChangeNotification,MPMoviePlayerPlaybackDidFinishNotificationMPMoviePlayerLoadStateDidChangeNotification,但这种情况不会发生.

有谁知道在后台AirPlay播放过程中是否可以接收这些,如果有的话,这是如何实现的?

**请注意:该应用程序在前台运行时可以正常工作并收到通知.只有当被推到后台并通过AirPlay播放时才会收到通知.

同样,视频正好在后台播放AirPlay.只收到未收到的通知**

red*_*sky 0

为了完整起见,我应该补充一点,目前我认为这个问题没有解决方案。

我已通过技术支持直接与 Apple 进行了讨论,但没有提供实际的解决方法。

需要此功能来允许应用程序定期记录有关流播放的统计信息。虽然当应用程序位于前台时在设备屏幕上和通过 AirPlay 播放视频时这很好,但应用程序在后台时则无法执行此操作。

我采用的解决方案是在所有类型的播放期间禁用空闲计时器,然后使用以下命令重新启用:

[UIApplication sharedApplication].idleTimerDisabled = YES;
Run Code Online (Sandbox Code Playgroud)

[UIApplication sharedApplication].idleTimerDisabled = NO;
Run Code Online (Sandbox Code Playgroud)

虽然这不是原始问题的解决方案,但它是首先避免该问题的解决方法。