Vik*_*art 5 avfoundation ios avplayerlayer swift avplayerviewcontroller
我尝试在AVPlayerLayer中显示本地录制的视频,该视频有时可以工作。我可以听到录制视频中的音频,但看不到视频。有时视频和音频都可以工作,有时只有音频。
我已经尝试过使用AVPlayerLayer和AVPlayerViewController,但这两种情况都会出现相同的问题。所以这不是因为框架错误。
示例代码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: 问题视频,在本例中播放了第三次。
这是我在视频工作时设置 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)
| 归档时间: |
|
| 查看次数: |
3764 次 |
| 最近记录: |