首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayerLayer说始终为零

AVPlayerLayer说始终为零
EN

Stack Overflow用户
提问于 2020-02-13 20:53:55
回答 2查看 250关注 0票数 0

我不明白为什么它不能工作。我通过一个段将一个videoURL传递给另一个ViewController。这可以很好地工作。

在另一个ViewController中,我想播放视频。但由于某些原因,它不起作用。我用可选的绑定解开了URL。但是playerLayer不接受这个网址。上面写着总是为零。

这是网址: Optional(file:///var/mobile/Containers/Data/Application/517BA864-F5CB-4E2C-BE54-D42555569266/Documents/3d.mov) VideoURL

我的代码:

代码语言:javascript
复制
var player: AVPlayer?
var playerLayer: AVPlayerLayer?
var videoURL: URL?


    func playVideo() {

    if let _videoURL = videoURL {
        player = AVPlayer(url: _videoURL)

        playerLayer = AVPlayerLayer(layer: player!)

        playerLayer?.frame = contentView.layer.bounds

        playerLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill

        self.contentView.layer.addSublayer(playerLayer!)

        player?.play()
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-13 21:23:21

尝试创建AVURLAssetAVPlayerItem。然后将该AVPlayerItem传递给AVPlayer,而不是尝试使用URL init。

我用从here下载的示例视频对此进行了测试。请注意,此视频中没有声音。

代码语言:javascript
复制
import UIKit
import AVFoundation

class ViewController: UIViewController {
    private let videoUrl = Bundle.main.url(forResource: "file_example_MOV_1920_2_2MB", withExtension: "mov")!
    private var videoPlayer: AVPlayer?
    private var playerLayer: AVPlayerLayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        playVideo()
    }

    func playVideo() {
        let asset = AVURLAsset(url: videoUrl)
        let primaryPlayerItem = AVPlayerItem(asset: asset)

        let player = AVPlayer(playerItem: primaryPlayerItem)

        let videoLayer = AVPlayerLayer(player: player)
        videoLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        videoLayer.frame = view.bounds

        view.layer.addSublayer(videoLayer)
        videoPlayer = player
        playerLayer = videoLayer
        videoPlayer?.play()
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-02-13 21:22:08

尝试下面的代码。起作用了。

代码语言:javascript
复制
var player: AVPlayer!
var playerLayer: AVPlayerLayer!

func playVideo() {
     if let url = videoURL {
    do {
        let item:AVPlayerItem = AVPlayerItem(url: url)
        player                = AVPlayer(playerItem: item)
        playerLayer           = AVPlayerLayer(player: player)
        playerLayer.frame     = contentView.bounds
        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        self.contentView.layer.addSublayer(playerLayer)
        player.play()
    } catch {
        print("Error1", error.localizedDescription)
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60208366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档