每次,当我尝试使用AVPlayer
播放一个兆字节的视频时,它最初会显示一个白色的屏幕,然后启动视频。
如果视频已经被缓存,为什么会发生这种情况?有没有办法阻止这种情况发生,这样它就可以直接进入视频而不显示白色屏幕?
我试着用AVPlayer
的isReady
来检查AVPlayer
的状态,只在它准备好的时候播放视频,但是它仍然显示白色的屏幕。
而且,每次我试图获得即将通过AVPlayer
播放的视频的持续时间时,我最初的播放时间为0.0秒,所以我也无法在视频中添加计时器,因为我无法获得视频的持续时间,因为它会在一秒钟内显示一个白色的屏幕。
发布于 2015-04-29 06:33:05
首先,AVPlayer
不显示任何白色屏幕,它的背景是白色的。所以,基本上你的AVPlayer
启动得很晚。我猜您按了一个UIButton
,然后它在AVPlayer
中加载文件,然后立即开始播放它。这就是问题所在。AVPlayer
可能需要一些时间来缓冲足够的数据并准备好播放该文件。使用KVO时,可以通知玩家状态的更改。
因此,首先需要禁用play按钮,加载AVPlayer
并添加一个观察者:
play.enabled = NO;
player = [AVPlayer playerWithURL:URL];
[player addObserver:self forKeyPath:@"status" options:0 context:nil];
检查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;
}
}
}
https://stackoverflow.com/questions/29935373
复制相似问题