我的视频播放器遇到了一个奇怪的情况,其核心代码与我之前制作的应用程序中的功能没有太大变化.这是问题所在:我正在插入一个"_loadingLayer"(一个说明视频正在加载的CATextLayer),然后观察AVPlayer的currentItem的status属性以确定何时删除"_loadingLayer"并将其替换为我的实际"_playerLayer" .这是我的KVO代码:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ((object == _playerLayer) && (_playerLayer.player.currentItem.status == AVPlayerItemStatusReadyToPlay)) {
[CATransaction setAnimationDuration:1.8];
_loadingLayer.opaque = NO;
if (_playerLayer.readyForDisplay) {
NSLog(@"Should be ready now.");
}
[self addPlayerLayerToLayerTree];
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是视频正在启动,但只播放音频 - 图层保持黑色.当我在上面插入NSLog语句时,我发现了原因:显然虽然currentItem的状态是"AVPlayerItemStatusReadyToPlay",但是播放器层实际上并不是readyForDisplay.这对我来说毫无意义 - 这似乎违反直觉.有人可以给我一些指导吗?
通过将其背景颜色设置为红色,我能够验证是否正在将_playerLayer添加到图层树中.
我认为另一个奇怪的事情可能是相关的....我在调试器控制台中看到了这些消息:
PSsetwindowlevel,错误设置窗口级别(1000)CGSSetIgnoresCycle:错误1000设置或清除窗口标记
提前致谢.这是Apple Dev论坛的一个交叉点.