首页 文章

AVPlayerLayer显示黑屏但声音正常

提问于
浏览
3

我试图在 AVPlayerLayer 中显示本地录制的视频,有时会有效 . 我可以听到录制视频中的音频但看不到视频 . 有时视频和音频都有效,有时只有音频 .

我已尝试使用 AVPlayerLayerAVPlayerViewController 但两种情况都会出现同样的问题 . 所以这不是因为框架错了 .

示例代码 AVPlayerViewController

let player = AVPlayer(url: url)
let playerController = AVPlayerViewController()
playerController.player = player

self.present(playerController, animated: true) {
  player.play()
}

示例代码 AVPlayerLayer

let asset = AVAsset(url: url)
let item = AVPlayerItem(asset: asset)

self.player = AVPlayer(playerItem: item)
self.player?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil)
self.playerLayer = AVPlayerLayer(player: self.player!)
self.playerLayer?.frame = imageView.bounds
imageView.layer.addSublayer(self.playerLayer!)

编辑1:

观察玩家的状态时, errornilstatusreadyToPlay

编辑2:

如果URL是远程的,则工作正常 .

编辑3:

如果我在视频完成导出后等待几秒钟,似乎可以工作 . 是不是100%写入文件系统的文件?

编辑4:Video的问题,在这种情况下它播放了第3次 .

3 回答

  • 0

    这里's how I set a AVPlayerLayer with the video working (I think what you'缺少的是 videoGravity 参数) .

    let bundle = Bundle.main
    let moviePath = bundle.path(forResource: "myVideo", ofType: "mp4")
    let moviePlayer = AVPlayer(url: URL(fileURLWithPath: moviePath!))
    
    playerLayer = AVPlayerLayer(player: moviePlayer)
    playerLayer.frame = movieView.bounds
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspect
    movieView.layer.addSublayer(playerLayer)
    playerLayer.player?.play()
    
  • 3

    它的框架高度或宽度等于零

  • 0

    我和你一样有同样的问题 . 原因是在iOS 10.xx中,如果您使用animationTool导出视频 . 你会遇到这样的麻烦 . 尝试通过删除此代码来修复它们 .

    类似的东西

    mainComposition.animationTool =  AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, in: parentlayer)
    

    希望能帮到你

相关问题