3

MPMoviePlayerを使用してビデオを再生します。問題は、ユーザーがデバイスのホームボタンを押したときに、ビデオの現在の位置を保存することです。 、だから私はsetCurrentPlaybackTime関数を使用します。iOS 5では完全に機能しますが、ビデオが最初から始まるiOS 5.1では機能しません。

この種の問題に対する解決策を持っている体はありますか?

4

3 に答える 3

7

私の問題は解決しました。これまでに行ったことを説明します。

その動作の解決策/説明を見つけることができなかったとき(これは奇妙だと思います)、私はたくさんのログを作成し始めました。

  currentPlaybackTime = nan

しかし、iOS 5では、通常の値が0.00000になりました

そのため、現在の時刻ごとにログを記録するタイマー(繰り返します)を作成したので、しばらくするとnanから0.00000に変化することに気付きました

私が行った結論は、PlaybackTime を設定する前に少し (理由がわからない) 待つ必要があるということです。したがって、1ミリ秒(1/1000) 待ってから動作します。

于 2012-05-18T12:21:01.970 に答える
2

setCurrentPlaybackTime の代わりに seekToTime (AvPlayer のみ) を使用してみましたか?

ここで提案されているように:
MPMoviePlayerController setCurrentPlaybackTime が間違った時間になるのはなぜですか?

注: このソリューションは、MPMoviePlayer ではなく AvPlayer 用です (リストされたリンクには示されていません)。しかし、AvPlayer に切り替える前に、追加の回答を待ちたいと思います。

于 2012-05-17T13:24:55.130 に答える
0

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;
        }
    }
}
于 2014-07-25T11:00:39.883 に答える