2

シームレスな再生のために、ユーザーがビデオを再生できるようになる前に、ビデオ 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 秒です。

4

1 に答える 1