AVPlayer 层不适合播放器视图

Posted

技术标签:

【中文标题】AVPlayer 层不适合播放器视图【英文标题】:AVPlayer layer is not fitting to the player view 【发布时间】:2019-07-14 11:14:27 【问题描述】:

我已经实现了 AV 视频播放器视图,播放器层不适合更大屏幕的 iPhone,例如 6 - 8 plus 和 iPhone XS Max。

我的播放器视图是金色的,这意味着播放器视图的约束正在适应屏幕边缘,所以问题出在 AVPlayerLayer。

请检查我下面的代码,并根据我的代码库建议我使用工作代码 sn-ps。

func setupVideoBg()
        // Load the video from the app bundle.
        let videoURL: NSURL = Bundle.main.url(forResource: "video", withExtension: "mov")! as NSURL

        player = AVPlayer(url: videoURL as URL)
        player?.actionAtItemEnd = .none
        player?.isMuted = true

        let playerLayer = AVPlayerLayer(player: player)

       // playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        playerLayer.videoGravity = AVLayerVideoGravity.resize
        playerLayer.zPosition = -1
    //    playerLayer.frame = CGRect(x: 0, y: 0, width: self.videoView.frame.size.width, height: self.videoView.frame.size.height)
        playerLayer.frame = videoView.layer.bounds
       // playerLayer.frame = videoView.bounds


        videoView.layer.addSublayer(playerLayer)
        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        player?.play()

        //loop video
        NotificationCenter.default.addObserver(self,
                                               selector: #selector
                                                (self.loopVideo),
                                               name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                            object: nil)
    

    @objc func loopVideo() 
        player?.seek(to: CMTime.zero)
        player?.play()
    

【问题讨论】:

显示你的代码如何设置AVPlayerLayer 对不起,我忘了添加 @Sh_Khan 代码已添加,请查看 你在哪里打电话setupVideoBg ?? 在 viewDidload() 中 【参考方案1】:

以下是您可能没有看到您如何设置 videoView.layer 的问题:

1 playerLayer.zPosition = -1

(您可能有理由更改您的 zPos,但是您可以简单地更改子图层的图层顺序)

2 playerLayer.frame = videoView.layer.bounds

(如果你的视图层错了,那么你就被坑了。你可以使用你的videoView.bounds.size.width的宽度并设置你的playerLayer.frame.size.width

【讨论】:

以上是关于AVPlayer 层不适合播放器视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他视图中使用 Swift 中的 AVPlayer 暂停和播放音乐

在视图中使用 AVPlayer 播放多个视频

当您离开视图时如何在 Swift 中停用 AVPlayer

使用 AVPLayer 实现媒体播放器以在 Swift 4 的模态视图控制器的弹出视图中播放来自远程 url 的音频

弹出视图控制器时继续播放 AVPlayer 流

切换到下一个视图控制器后,AVPlayer 视频仍在播放