转到youtube的后台后,MPMoviePlayerViewController播放video
我已经在我的应用程序的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]; }
它有效,但有一些权衡:当我重新启动它时,它丢失了流video部分。 用户需要再次等待流式传输。
这是我的问题:
- 有什么方法可以在应用程序处于后台时继续播放Youtube的video吗?
- 或如何保持流媒体部分?
如果我跳过该行,它将从video的开头播放:
self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
在continuePlayBack方法或我setCurrentPlayBackTime而不是setInitPlayBackTime。
你发现的东西完全正常 – 很奇怪,但很正常。 MPMoviePlayerController
仅在MPMoviePlayerController
实例上使用时才会尊重initialPlaybackTime
。 我确实敦促你提交关于该问题的错误报告,因为它已知年龄(iOS3)但未修复。
没有办法保持缓冲状态,你已经起草的解决方案与我在许多应用程序中使用的解决方案非常相似。
现在直接回答你的问题;
重新1)是的,不。 正如您自己发现的那样,Apple确实对UIBackgroundModes
使用非常苛刻。 即使他们明确建议使用它来实现不间断的AirPlay流式传输(video和音频内容),但他们仍在拒绝应用程序,而他们只是在播放video。 我也认为苹果审核团队的一个史诗般的失败。 您可能想尝试抵制他们的拒绝,引用他们自己的文档:
重要提示: UIBackgroundModes音频键允许应用使用AirPlay在后台传输音频或video内容。
来自: http : //developer.apple.com/library/ios/#qa/qa1668/_index.html
2)否(见引言答案文本)
我还要从另一方面解决这个问题……
如果您的问题实际上是在iOS5上,设备在通过AirPlay进行流式传输时进入睡眠模式。 然后,实际上有一种可行的解决方法至少可行 – 即使它是令人讨厌的……
您可以注册MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification
并检查hooked方法中的airPlayVideoActive
。 一旦AirPlay处于活动状态,只需通过设置[UIApplication sharedApplication].idleTimerDisabled = YES;
防止空闲[UIApplication sharedApplication].idleTimerDisabled = YES;
一旦AirPlay变为非活动状态,请记住反向操作。 所有这些只应在iOS5上使用,因为iOS6修复了AirPlay处于活动状态时的空闲问题。