AVPlayerLayer没有显示AVPlayer视频?

时间:2015-07-14 09:38:50

标签: ios video avplayer avplayerlayer

让AVPlayer视频内容显示在一个视图中的诀窍是什么?

我们正在使用以下AVPlayer代码,但屏幕上没有任何内容。我们知道视频就在那里,因为我们可以使用MPMoviePlayerController来显示它。

以下是我们使用的代码:

-std=c++14

我们是否为当前视图设置了不正确的图层?

2 个答案:

答案 0 :(得分:9)

您需要设置图层的框架属性。 e.g:

 self.playerLayer.frame = CGRectMake(0, 0, 100, 100)

如果您尝试了这个并且它在视图控制器的视图中不起作用,则可能是您尝试将图层的frame属性设置为视图控制器frame或{{1}在bounds创建时{0, 0, 0, 0}的属性。您需要在布局过程中设置播放器的框架,此时视图控制器的AVPlayerLayer将设置为frame以外的其他内容。要做到这一点:

如果您在自定义UIView(包括IB)中使用自动布局:

{0, 0, 0, 0}

如果您在自定义UIViewController中使用自动布局:

override func layoutSubviews() {
    super.layoutSubviews()

    //Match size of view
    CATransaction.begin()
    CATransaction.setDisableActions(true)
    self.playerLayer.frame = self.bounds
    CATransaction.commit()
}

override fun viewDidLayoutSubviews() { //Match size of view-controller CATransaction.begin() CATransaction.setDisableActions(true) self.playerLayer.frame = self.view.bounds CATransaction.commit() } 行将禁用图层帧更改的隐式动画。如果您想知道为什么通常不需要它,那是因为默认情况下支持UIView的图层不会隐式动画。在这种情况下,我们使用的是非视图支持图层(CATransaction

最佳路径是通过界面构建​​向视图控制器添加新视图,并在新添加的视图上设置自定义类。然后创建该自定义视图类并实现AVPlayerLayer代码。

答案 1 :(得分:2)

事实证明,AVPlayer需要自己的上下文视图才能播放。

我们添加了此代码,现在视频播放了。不幸的是,与MPMoviePlayerController不同,AVPlayer没有内置控件。目前还不清楚苹果为什么不赞成使用非标准化视频播放选项的工具。

$("form.ajax-submit-createuser").find('input[name=formName]').val();