我在我的应用程序的 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];
}
它可以工作,但需要权衡:当我重新启动它时,它丢失了流式视频部分。用户需要再次等待流式传输。
我的问题来了:
- 有没有办法在应用程序处于后台时继续流式传输 Youtube 的视频?
- 或者如何保持流式传输的部分?
如果我跳过该行,它将从视频的开头播放:
self.mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[self.videos objectForKey:@"medium"]]] ;
在 continuePlayBack 方法或我 setCurrentPlayBackTime 而不是 setInitPlayBackTime。