iOS5中的MPMoviePlayerController背景音频问题

iOS5中的MPMoviePlayerController背景音频问题,ios5,mpmovieplayercontroller,Ios5,Mpmovieplayercontroller,我有一个应用程序可以执行非常标准的操作: 当应用程序处于1)前台模式、2)屏幕锁定状态、3)后台模式时,它会播放音频(流媒体或文件系统)。 这在iOS5之前的所有iOS中都运行良好 我一直在使用MPMoviePlayerController(因为它可以播放流媒体和本地文件系统音频) 我有以下设置: info.plist的背景模式设置为“音频” 我有音频会话设置,如所示 我启用了后台计时器,在音频播放结束时停止 UIBackgroundTaskIdentifier newId=[[UIAppli

我有一个应用程序可以执行非常标准的操作: 当应用程序处于1)前台模式、2)屏幕锁定状态、3)后台模式时,它会播放音频(流媒体或文件系统)。 这在iOS5之前的所有iOS中都运行良好

我一直在使用MPMoviePlayerController(因为它可以播放流媒体和本地文件系统音频) 我有以下设置:

  • info.plist的背景模式设置为“音频”
  • 我有音频会话设置,如所示

  • 我启用了后台计时器,在音频播放结束时停止 UIBackgroundTaskIdentifier newId=[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]

  • 我有Moveplayer的useApplicationAudioSession=否
  • 我已经订阅了以下事件来检测和处理各种播放状态,并在当前文件的末尾启动一个新的音频文件。 MPMoviePlayerLoadStateDidChangeNotification MPMoviePlayerPlaybackDidFinishNotification MPMoviePlayerPlaybackStateDidChangeNotification MPMoviePlayerNowPlayingMoviedChangeNotification
  • 问题: 此时音频开始播放,当应用程序处于后台状态或手机锁定时,音频继续播放。但是,当我启动另一个音频文件后, 我立即开始收到PlaybackDidFinishNotification,状态设置为“播放结束”(但该文件从未播放)

    同样的代码在前台模式下播放音频文件(当前音频文件结束后,下一个文件将毫无问题地启动)

    iOS5中有没有什么新的东西可以让它正常工作?我通读了MPMoviePlayerController类参考,没有看到iOS5的任何具体内容


    提前谢谢。

    终于解决了这个问题。这在苹果开发者论坛的帖子中得到了解决(需要登录才能看到)。这篇文章适用于AVPlayer,但也修复了MPMoviePlayerController的问题

    基本上,这是那篇文章的摘录:

    你的应用程序必须支持远程控制事件!这些是音频 多任务左侧的控制器接口prex/nex/play/pause 切换器任务栏(不确定事物的正确名称)。你 确保您的视图成为第一个控制器,然后调用

    在viewDidLoad中。一旦你这样做,你的玩家将不再回来 不


    我的情况不同,我在这里(以及在另一个问题中)回答这个问题只是为了帮助未来的搜索者了解这个错误消息。这并不能回答原来的问题

    我的应用程序可以播放声音或歌曲,但当我第一次编码时,它可以同时播放。在测试中,我总是用一首歌来测试。我用平常的方式演奏了这首歌:

        self.musicQuery = [MPMediaQuery songsQuery];
        [_musicQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:selectedSongID forProperty:MPMediaItemPropertyPersistentID comparisonType:MPMediaPredicateComparisonEqualTo]];
        [_musicQuery setGroupingType:MPMediaGroupingTitle];
        [_myPlayer setQueueWithQuery:_musicQuery];
    
        [_myPlayer play];
    
    几周过去了,我开始测试声音,用AVAudioPlayer播放。我的应用程序开始冻结5秒钟,我会在控制台中收到MediaPlayer:Message playbackState timed out消息


    事实证明,传递一个空的查询是导致冻结和消息丢失的原因。将我的应用程序的逻辑更改为仅在有歌曲播放时播放歌曲,修复了此问题。

    你的问题是我的答案,非常好!非常感谢。
    > [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    
        self.musicQuery = [MPMediaQuery songsQuery];
        [_musicQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:selectedSongID forProperty:MPMediaItemPropertyPersistentID comparisonType:MPMediaPredicateComparisonEqualTo]];
        [_musicQuery setGroupingType:MPMediaGroupingTitle];
        [_myPlayer setQueueWithQuery:_musicQuery];
    
        [_myPlayer play];