在我的项目中,我使用了 AVSampleBufferDisplayLayer 和 AVPlayerLayer。它们的 Bot 具有相似的界面和 videoGravity 属性。 当我更改 AVPlayerLayer videoGravity 属性时,视频会立即通过动画效果重新调整大小。使用 AVSampleBufferDisplayLayer videoGravity 在我改变设备方向之前没有任何反应,然后视频在没有动画的情况下重新调整大小。
如何将 AVSampleBufferDisplayLayer 的 videoGravity 更改为类似于 AVPlayerLayer 的行为?
最佳答案
我找到的唯一解决方案是重新初始化 AVSampleBufferDisplayLayer,例如:
var displayBufferLayer: AVSampleBufferDisplayLayer?
...
func reinitBufferLayer(videoGravity: AVLayerVideoGravity) {
displayBufferLayer?.flush()
displayBufferLayer?.stopRequestingMediaData()
displayBufferLayer?.removeFromSuperlayer()
let bufferLayer = AVSampleBufferDisplayLayer()
bufferLayer.frame = view.bounds
bufferLayer.videoGravity = videoGravity // (i.e. .resizeAspectFill)
bufferLayer.isOpaque = true
view.layer.insertSublayer(bufferLayer, at: 0)
self.displayBufferLayer = bufferLayer
}
关于ios - AVSampleBufferDisplayLayer : change videoGravity animated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439729/