AVPlayerLayer显示黑屏,但声音正常

时间:2016-11-25 15:38:45

标签: ios swift avfoundation avplayerviewcontroller avplayerlayer

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

我已尝试使用 AVPlayerLayer AVPlayerViewController ,但在这两种情况下都会出现同样的问题。所以这不是因为框架错了。

示例代码 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:

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

编辑4: 问题的Video,在这种情况下它发挥了第3次。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

框架高度或宽度等于零

答案 2 :(得分:0)

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

类似的东西

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

希望能帮到你