シームレスな再生のために、ユーザーがビデオを再生できるようになる前に、ビデオ URL を AVPlayer に完全にロードしようとしています。
に 2 つのオブザーバーを追加しAVPlayerItem
ます。
[item addObserver:self forKeyPath:@"loadedTimeRanges"
options:NSKeyValueObservingOptionNew context:&timeRanges];
[item addObserver:self forKeyPath:@"playbackBufferFull"
options:NSKeyValueObservingOptionNew context:&playbackBufferFull];
値がビデオの長さと等しくなるまで待ちます-完全にロードされます。
if (context == &timeRanges) {
NSLog(@"BUFFERING");
NSArray *timeRanges = (NSArray *)[change objectForKey:NSKeyValueChangeNewKey];
CMTimeRange timerange = [timeRanges[0] CMTimeRangeValue];
CGFloat value = CMTimeGetSeconds(CMTimeAdd(timerange.start, timerange.duration));
CGFloat duration = CMTimeGetSeconds(self.player.currentItem.duration);
NSLog(@"VALUE:DURATION == %f:%f", value, duration);
if(value == duration) {
NSLog(@"FINISHED");
[self prerollVideoPlayer];
}
return;
}
しかし、これはめったに起こりません。プレーヤーは通常、5 秒間のビデオの約 3 でバッファリングを停止します。次に、「playbackBufferFull」が呼び出されます
if (context == &playbackBufferFull){
if (self.player.currentItem.playbackBufferFull) {
NSLog(@"IS FULL");
//[self prerollVideoPlayer];
}
return;
}
バッファサイズを増やすにはどうすればよいですか? または、一度呼び出されたビデオの残りをバッファリングする方法playbackBufferFull
は? 再生中の動画の長さはわずか 5 秒です。