5

を使用してメガバイトのビデオを再生しようとするたびに、AVPlayer最初に白い画面が 1 秒間表示されてから、ビデオが開始されます。

ビデオが既にキャッシュされている場合、なぜこのようなことが起こるのですか? 白い画面を表示せずにビデオに直接行くように、これを防ぐ方法はありますか?

AVPlayerisReady状態を確認し、AVPlayer準備ができた場合にのみビデオを再生するためにを使用しようとしましたが、まだ白い画面が表示されます。

また、再生しようとしているビデオのビデオ期間を取得しようとするたびに、AVPlayer最初は 0.0 秒を取得し続けるため、ビデオの期間を取得できないため、ビデオにタイマーを追加することもできません。白い画面が 1 秒間表示され続けます。

4

4 に答える 4

4

まず、AVPlayer白い画面は表示されません。背景は白です。だから、基本的にあなたAVPlayerは遅く始めています。UIButtona を押すと、ファイルが読み込まれAVPlayer、すぐに再生が開始されると思います。そこが問題です。AVPlayerが十分なデータをバッファリングし、ファイルを再生できるようになるまで、しばらく時間がかかる場合があります。KVO を使用すると、プレイヤーのステータスの変化を通知することができます。

したがって、最初に再生ボタンを無効にし、ロードしAVPlayerてオブザーバーを追加する必要があります。

play.enabled = NO;
player = [AVPlayer playerWithURL:URL];
[player addObserver:self forKeyPath:@"status" options:0 context:nil]; 

次に、チェックした後に有効にしますAVPlayerStatusReadyToPlay

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == player && [keyPath isEqualToString:@"status"]) {
        if (player.status == AVPlayerStatusReadyToPlay) {
            play.enabled = YES;
        }
    }
}
于 2015-04-29T06:33:05.787 に答える
3

これは古い質問であることは知っていますが、AVPlayer の再生準備が整っていることを適切に検出しても、同じ問題が発生します。

最初の静止画像から動画への移行がスムーズになるように、画像の上で再生したかったのです。

私にとっての秘訣は、次のように明確な背景を設定することでした。

AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[controller.view setBackgroundColor:[UIColor clearColor]];

このようにして、プレーヤーの再生準備が整ったときにプレーヤーの表示を切り替えると、プレーヤーの背景がクリアになり、スムーズな移行が行われるため、黒または白の画面が表示されることはありません!

于 2017-06-20T14:32:19.360 に答える
0

私も同じ問題を抱えていました。KVOの追加を避けるために、URLが次のように設定されているときにAVPlayerを設定しました...

var urlToUse: NSURL?
{
    didSet
    {
        guard let urlToUse = urlToUse else { return }
        replayPlayer = AVPlayer(URL: urlToUse)
    }
}

そうすれば、AVPlayer のステータスは必要なときに準備が整います。

于 2016-07-18T16:22:50.363 に答える