【问题标题】:Setting AVPlayerLayer VideoGravity works on Simulator, not on iPad设置 AVPlayerLayer VideoGravity 适用于模拟器,不适用于 iPad
【发布时间】:2012-03-23 09:30:56
【问题描述】:

我目前正在使用 AVPlayer 框架为流式内容开发视频播放器。 我偶然发现了 AVPlayerLayer 的 VideoGravity String-Property,它可以让我将播放器缩放/调整大小模式设置为不同的值。

为了向用户提供默认播放器已知的缩放功能,我设置了一个方法来执行以下代码:

AVPlayerLayer *layer = (AVPlayerLayer *)[self.videoContainer layer];

if([layer.videoGravity isEqualToString:AVLayerVideoGravityResizeAspect])
    layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
else 
    layer.videoGravity = AVLayerVideoGravityResizeAspect;

这在模拟器中运行良好,但不知何故不适用于安装了 iOS 5.0.1 的 iPad 2。

有没有人遇到过类似的问题?这是 5.0.1 的已知 iOS 错误吗?有没有更好的方法来使用 AVPlayerLayer 实现缩放/调整大小?

非常感谢任何想法/提示/帮助和建议,

谢谢,

Sam

【问题讨论】:

  • 当你说它不能在真实设备上工作时,实际发生了什么?什么都没有或其他一些意外行为?
  • 不幸的是,没有(可见的)发生......如果我 NSLog(layer.videoGravity) 返回“正确的” VideoGravity 字符串。它也接受对它的更改,但它并没有真正调整电影内容的大小......
  • 我可能在这里找错了树,但你为什么要将 videoGravity 设置为常量名称的字符串,而不是将其设置为常量本身?
  • 也无济于事……如上所述;控件确实会相应地更改 videoGravity 的值,但 playerLayer 没有做任何事情(在垫上,在模拟器上它工作得很好)
  • 仍然应该直接使用常量来设置属性,而不是那些常量的假定值:)

标签: objective-c ios avplayer


【解决方案1】:

设置边界将在内部setNeedsLayout。如果你只改变重力,你必须称它为你自己。调用setNeedsDisplay 强制重新绘制也没有什么坏处,尽管我认为 AVPlayerLayer 会频繁更新图层内容,这并不重要。

编辑:你的名字是我的两倍!

【讨论】:

  • 我无法让这个解决方案为我工作,并发现问题出在 iOS 5.0 和 5.0.1 中。如果其他人偶然发现此问题并需要解决方案,请查看:stackoverflow.com/questions/8918105/…
【解决方案2】:

我终于设法通过将上述语句与以下语句交换来解决我的问题......

    if (self.player.status == AVPlayerStatusReadyToPlay) {
    if([((AVPlayerLayer *)[self.videoContainer layer]).videoGravity isEqualToString:AVLayerVideoGravityResizeAspect])
        ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspectFill;
    else 
        ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspect;

    ((AVPlayerLayer *)[self.videoContainer layer]).bounds = ((AVPlayerLayer *)[self.videoContainer layer]).bounds;
}

将 AVPlayerLayer 的边界设置为 AVPlayerLayer 的边界似乎可以解决问题。虽然我真的不明白为什么。

但是:为工作解决方案欢呼。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2011-03-08
  • 2015-02-13
  • 2011-03-20
相关资源
最近更新 更多