如何正确使用 AVPlayer 使其在播放视频前不显示白屏?

Adp*_*Adp 5 video objective-c avfoundation ios snapchat

每次,当我尝试使用 播放兆字节视频时AVPlayer,它首先会显示一秒钟的白屏,然后开始播放视频。

如果视频已经缓存,为什么会发生这种情况?有没有办法阻止这种情况发生,以便它直接进入视频而不显示白屏?

我尝试使用AVPlayer'sisReady检查视频的状态AVPlayer并仅在视频准备就绪时播放视频,但它仍然显示白屏。

另外,每次当我尝试获取即将播放的视频的视频持续时间时,AVPlayer我最初都会得到 0.0 秒,所以我也无法向视频添加计时器,因为我无法获取视频持续时间,因为它持续显示白屏一秒钟。

bla*_*cos 4

首先,AVPlayer不显示任何白屏,它的背景是白色的。所以,基本上你AVPlayer开始晚了。我猜你按 aUIButton然后它会加载文件AVPlayer并立即开始播放。这就是问题所在。可能需要一些时间AVPlayer缓冲足够的数据并准备好播放文件。使用 KVO,可以通知玩家状态的变化。

因此,首先您需要禁用播放按钮,加载AVPlayer并添加观察者:

play.enabled = NO;
player = [AVPlayer playerWithURL:URL];
[player addObserver:self forKeyPath:@"status" options:0 context:nil]; 
Run Code Online (Sandbox Code Playgroud)

检查后启用它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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)