AVPlayer层不播放视频,但音频很好



我有一个令人困惑的问题。 我在类中声明了这些变量:

var audioPlayer = AVPlayer()
var videoPlayer = AVPlayer()
var videoLayer = AVPlayerLayer()

我有这些代码来添加视频播放器的容器:

let aspectHeight = view.frame.width * 9/16
let viewFrame = CGRect(x: 5, y: 0, width: view.frame.width - 10, height: aspectHeight)
let layerFrame = CGRect(x: 0, y: 0, width: view.frame.width - 10, height: aspectHeight)
videoPlayerContainerView.frame = viewFrame
videoPlayerViewController.frame = viewFrame
videoLayer.frame = layerFrame
videoLayer.backgroundColor = UIColor.green.cgColor
videoPlayerContainerView.layer.addSublayer(videoLayer)
videoPlayerContainerView.addSubview(videoPlayerViewController)
videoElementContainerView.addView(newView: videoPlayerContainerView)

我也有这个函数(我用临时 URL 替换了传递的参数(:

@IBAction func pausePlayVideo(_ sender: CustomButton) {
let videoString = videoSourceURL + (sender.paramaters["thisVideoURL"] as! String)
let videoURL = URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
videoPlayer = AVPlayer(url: videoURL!)
videoLayer = AVPlayerLayer(player: videoPlayer)
videoPlayer.play()
}

我在这里称呼它:

pausePlayButton.addTarget(self, action: #selector(ModuleLessonElementsViewController.pausePlayVideo(_:)), for: .touchUpInside)
pausePlayButton.paramaters["thisVideoURL"] = content

这是视图: 图层已添加,音频播放,但视频未播放。

按下按钮时,音频会播放,但视频不会播放。 我在这里错过了什么重要的东西吗?

这很简单。早期,你说:

videoPlayerContainerView.layer.addSublayer(videoLayer)

好的,所以你有一个播放器层videoLayer,与没有播放器相关联,它现在在界面中。好。

稍后,当按下按钮时,您说:

@IBAction func pausePlayVideo(_ sender: CustomButton) {
// ...
videoLayer = AVPlayerLayer(player: videoPlayer)
videoPlayer.play()
}

那么刚刚发生了什么?videoLayer,您丢弃了对之前添加到界面的层的引用,并替换了您刚刚创建的全新播放器层,该层不在界面中。好的,所以您与播放器关联的视频层不在界面中,因此您可以听到播放器的声音,但看不到任何东西。

相关内容

最新更新