AVPlayerLayer 显示黑屏但声音正常

Vik*_*art 5 avfoundation ios avplayerlayer swift avplayerviewcontroller

我尝试在AVPlayerLayer中显示本地录制的视频,该视频有时可以工作。我可以听到录制视频中的音频,但看不到视频。有时视频和音频都可以工作,有时只有音频。

我已经尝试过使用AVPlayerLayerAVPlayerViewController,但这两种情况都会出现相同的问题。所以这不是因为框架错误。

示例代码AVPlayerViewController

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

self.present(playerController, animated: true) {
  player.play()
}
Run Code Online (Sandbox Code Playgroud)

示例代码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!)
Run Code Online (Sandbox Code Playgroud)

编辑1:

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

编辑2:

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

编辑3:

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

编辑 4: 问题视频,在本例中播放了第三次。

Jer*_*emy 3

这是我在视频工作时设置 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()
Run Code Online (Sandbox Code Playgroud)