Ios AVPlayerLayer显示黑屏,但声音正常

Ios AVPlayerLayer显示黑屏,但声音正常,ios,swift,avfoundation,avplayerviewcontroller,avplayerlayer,Ios,Swift,Avfoundation,Avplayerviewcontroller,Avplayerlayer,我正在尝试在一个AVPlayerLayer中显示一个本地录制的视频,这有时会起作用。我可以从录制的视频中听到音频,但看不到视频。有时视频和音频都工作,有时只有音频 我用AVPlayerLayer和avplayervewcontroller尝试了这两种方法,但在这两种情况下都出现了相同的问题。所以这并不是因为帧错了 示例代码avplayervewcontroller: let player = AVPlayer(url: url) let playerController = AVPlayerVi

我正在尝试在一个AVPlayerLayer中显示一个本地录制的视频,这有时会起作用。我可以从录制的视频中听到音频,但看不到视频。有时视频和音频都工作,有时只有音频

我用AVPlayerLayeravplayervewcontroller尝试了这两种方法,但在这两种情况下都出现了相同的问题。所以这并不是因为帧错了

示例代码avplayervewcontroller:

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

self.present(playerController, animated: true) {
  player.play()
}
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!)
示例代码AVPlayerLayer:

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

self.present(playerController, animated: true) {
  player.play()
}
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:

如果在视频完成导出后等待几秒钟,似乎可以正常工作。文件不是100%写入文件系统,这可能是什么原因吗

编辑4:
对于这个问题,在这种情况下,它播放了第三次

下面是我如何在视频正常工作的情况下设置AVPlayerLayer(我想您缺少的是
videoGravity
参数)


它的帧高度或宽度等于零

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

诸如此类

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

希望能帮助您

谢谢您的回复,但正如我所说,它有时会起作用。如果视频是从远程URL发送的,则始终如此。由于AVPlayServiceWController中存在同样的问题,我想这不是因为这个。令人惊讶的是,这似乎解决了我在tvOS上的问题。奇怪的事情发生了o) 。谢谢。请在这里建议:显示出口代码。出口代码可以在这里找到。所以有多个视频?@matt right,多个视频,导出到一个视频。然后我试着显示导出的视频,效果很好。有时。。如果我把它上传到S3上,我可以很好地观看视频。是的,我明白了。您正在等待,直到获得
CameradFinishExportingVideo