AVPlayerLayer显示黑屏但声音正常

我试图在AVPlayerLayer中显示本地录制的video,它有时会起作用。 我可以听到录制video中的音频但看不到video。 有时video和音频都有效,有时只有音频。

我已尝试使用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:

观察播放器的状态时, 错误 nil状态readyToPlay

编辑2:

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

编辑3:

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

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

以下是我设置video工作的AVPlayerLayer的方法(我认为你缺少的是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() 

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

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

类似的东西

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

希望能帮到你