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
できますが、プレーヤーの上に通常の画像を使用する方が簡単です。必要に応じて非表示/表示します。
サンプル プロジェクト:私の回答をサポートするために私が書いたコードで自由に遊んでください。