小编sti*_*ggs的帖子

AV Foundation:currentItem准备播放和 - [AVPlayer readyForDisplay]属性之间的区别?

我的视频播放器遇到了一个奇怪的情况,其核心代码与我之前制作的应用程序中的功能没有太大变化.这是问题所在:我正在插入一个"_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论坛的一个交叉点.

macos cocoa avfoundation

5
推荐指数
1
解决办法
3332
查看次数

标签 统计

avfoundation ×1

cocoa ×1

macos ×1