转到youtube的后台后,MPMoviePlayerViewController播放视频

时间:2013-03-13 15:46:49

标签: ios mpmovieplayercontroller appstore-approval

我已在应用的info.plist中为所需的背景模式设置应用播放音频,以保持mpmovieplayerviewcontroller在转到后台后不会被忽略。它做得很好。但是,Apple最近拒绝了我的应用更新,因为我设置了该属性。

然后我一直在寻找做同样工作但却失败的解决方案。为了处理它,我在视图控制器收到UIApplicationDidEnterBackgroundNotification

时保存当前播放时间
-(void)willEnterBackground {
    NSLog(@"willEnterBackground");
    if (self.mp) {
        playbackTime = self.mp.moviePlayer.currentPlaybackTime;
        [self.mp dismissModalViewControllerAnimated:YES];
    }
}

在收到UIApplicationWillEnterForegroundNotification之后设置currentPlayBackTime:

- (void)willEnterForeground {
    NSLog(@"willEnterForeground");

    if (!self.mp)
        return;
    if(self.mp.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted || self.mp.moviePlayer.playbackState == MPMoviePlaybackStateStopped || self.mp.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
    {
        [self continuePlayback];
    }
}

- (void)continuePlayback {
    NSLog(@"%f", self.mp.moviePlayer.duration);
    NSLog(@"%f", playbackTime);
    [self.mp.moviePlayer stop];
    self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
    [self.mp.moviePlayer setInitialPlaybackTime:playbackTime];
    [self.mp.moviePlayer play];
    [self presentModalViewController:self.mp animated:YES];
}

它有效,但有一些权衡: 当我重新启动它时,它丢失了流式视频部分。用户需要再次等待流式传输。

以下是我的问题:

  1. 有什么方法可以在应用播放时继续播放Youtube的视频 在背景?
  2. 或如何保留流媒体部分?
  3. 如果我跳过该行,它将从视频的开头播放:

    self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
    

    在continuePlayBack方法或我setCurrentPlayBackTime而不是setInitPlayBackTime。

1 个答案:

答案 0 :(得分:3)

你发现的是完全正常的 - 很奇怪,但很正常。 MPMoviePlayerController在新实例上使用时仅尊重initialPlaybackTime。我确实建议你提交一个关于这个问题的错误报告,因为它已经知道了(iOS3),但没有修复。

没有办法保持缓冲状态,你起草的解决方案与我在许多应用程序中使用的解决方案几乎相同。


现在直接回答你的问题;

重新1)是和否。正如您自己发现的那样,Apple在使用UIBackgroundModes时确实非常苛刻。即使他们明确建议使用它来实现不间断的AirPlay流式传输(视频和音频内容),但他们仍在拒绝应用程序,而他们所做的只是播放视频。我也认为Apple审核团队的一个史诗般的失败。你可能想试着反对他们的拒绝,引用他们自己的文档:

  

重要提示: UIBackgroundModes音频键将允许应用流式传输   使用AirPlay在后台播放音频或视频内容。

来自:http://developer.apple.com/library/ios/#qa/qa1668/_index.html

重新2)否(见引言答案文本)


让我也从另一方面解决这个问题......

如果您的问题实际上是在iOS5上,设备在通过AirPlay进行流式传输时进入睡眠模式。然后,实际上有一种可能的解决方法至少可行 - 即使它是令人讨厌的...... [/ p>

您可以注册MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification并查看隐藏方法中的airPlayVideoActive。一旦AirPlay处于活动状态,只需设置[UIApplication sharedApplication].idleTimerDisabled = YES;即可防止空转。请记住,一旦AirPlay变为非活动状态,请执行相反操作。所有这些只应在iOS5上使用,因为iOS6修复了AirPlay处于活动状态时的空闲问题。