MPMoviePlayerを使用してビデオを再生します。問題は、ユーザーがデバイスのホームボタンを押したときに、ビデオの現在の位置を保存することです。 、だから私はsetCurrentPlaybackTime関数を使用します。iOS 5では完全に機能しますが、ビデオが最初から始まるiOS 5.1では機能しません。
この種の問題に対する解決策を持っている体はありますか?
MPMoviePlayerを使用してビデオを再生します。問題は、ユーザーがデバイスのホームボタンを押したときに、ビデオの現在の位置を保存することです。 、だから私はsetCurrentPlaybackTime関数を使用します。iOS 5では完全に機能しますが、ビデオが最初から始まるiOS 5.1では機能しません。
この種の問題に対する解決策を持っている体はありますか?
私の問題は解決しました。これまでに行ったことを説明します。
その動作の解決策/説明を見つけることができなかったとき(これは奇妙だと思います)、私はたくさんのログを作成し始めました。
currentPlaybackTime = nan
しかし、iOS 5では、通常の値が0.00000になりました
そのため、現在の時刻ごとにログを記録するタイマー(繰り返します)を作成したので、しばらくするとnanから0.00000に変化することに気付きました
私が行った結論は、PlaybackTime を設定する前に少し (理由がわからない) 待つ必要があるということです。したがって、1ミリ秒(1/1000秒) 待ってから動作します。
setCurrentPlaybackTime の代わりに seekToTime (AvPlayer のみ) を使用してみましたか?
ここで提案されているように:
MPMoviePlayerController setCurrentPlaybackTime が間違った時間になるのはなぜですか?
注: このソリューションは、MPMoviePlayer ではなく AvPlayer 用です (リストされたリンクには示されていません)。しかし、AvPlayer に切り替える前に、追加の回答を待ちたいと思います。
MPMoviePlayerLoadStateDidChangeNotification 通知を受け取った後、currentPlaybackTime を設定する必要があります。
moviePLayer がロードされているかどうかを知るには、まず MPMoviePlayerLoadStateDidChangeNotification に登録する必要があります。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
ムービー プレーヤーがロードされると、movieLoadStateDidChange: が呼び出され、MPMovieLoadStatePlaythroughOK ロード状態を確認し、currentPlaybackTime を設定します。
- (void)movieLoadStateDidChange:(NSNotification *)notification
{
MPMoviePlayerController *player = notification.object;
MPMovieLoadState loadState = player.loadState;
/* Enough data has been buffered for playback to continue uninterrupted. */
if (loadState & MPMovieLoadStatePlaythroughOK)
{
//should be called only once , so using self.videoLoaded - only for first time movie loaded , if required. This function wil be called multiple times after stalled
if(!self.videoLoaded)
{
self.moviePlayerController.currentPlaybackTime = self.currentPlaybackTime;
self.videoLoaded = YES;
}
}
}