1)AVPlayerいくつかのケースでビデオをバッファリングしますが、明確に文書化されているものはありません。ビデオを開始するとき、および現在のアイテムを置き換えるときに、バッファリングが期待できると思います。何が起こっているかを観察することができますcurrentItem.loadedTimeRanges。そのプロパティは、どのビデオの時間範囲が読み込まれたかを示します。
currentItemまた、役立つプロパティが他にもいくつかあります: playbackLikelyToKeepUp、playbackBufferFullおよびplaybackBufferEmpty.
完全なギャップレス再生を実現することは容易ではありません。
/* player is an instance of AVPlayer */
[player addObserver:self
forKeyPath:@"currentItem.loadedTimeRanges"
options:NSKeyValueObservingOptionNew
context:kTimeRangesKVO];
でobserveValueForKeyPath:ofObject:change:context::
if (kTimeRangesKVO == context) {
NSArray *timeRanges = (NSArray *)[change objectForKey:NSKeyValueChangeNewKey];
if (timeRanges && [timeRanges count]) {
CMTimeRange timerange = [[timeRanges objectAtIndex:0] CMTimeRangeValue];
NSLog(@" . . . %.5f -> %.5f", CMTimeGetSeconds(timerange.start), CMTimeGetSeconds(CMTimeAdd(timerange.start, timerange.duration)));
}
}
2) ただ目を離さないでplayer.rateください。
[player addObserver:self
forKeyPath:@"rate"
options:NSKeyValueObservingOptionNew
context:kRateDidChangeKVO];
次に、あなたのobserveValueForKeyPath:ofObject:change:context::
if (kRateDidChangeKVO == context) {
NSLog(@"Player playback rate changed: %.5f", player.rate);
if (player.rate == 0.0) {
NSLog(@" . . . PAUSED (or just started)");
}
}
3)静止画像を使用して特定の長さの動画を作成UIImageViewできますが、プレーヤーの上に通常の画像を使用する方が簡単です。必要に応じて非表示/表示します。
サンプル プロジェクト:私の回答をサポートするために私が書いたコードで自由に遊んでください。