アプリの info.plist で必要なバックグラウンド モードに App Plays Audio を設定して、バックグラウンドに移行した後に mpmovieplayerviewcontroller が閉じないようにしました。それは素晴らしい仕事をしました。しかし、私がその属性を設定したため、Apple は最近、私のアプリの更新を拒否しました。
次に、同じ仕事をするための解決策を見つけ続けますが、失敗します。それに対処するために、View Controller が UIApplicationDidEnterBackgroundNotification を受け取ったときに currentplaybacktime を保存します。
-(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 メソッドで、または setInitPlayBackTime の代わりに CurrentPlayBackTime を設定します。