AVSampleBufferDisplayLayer:更改videoGravity动画

时间:2015-10-30 15:38:58

标签: ios objective-c

在我的项目中,我正在使用AVSampleBufferDisplayLayer和AVPlayerLayer。他们的机器人有类似的界面和videoGravity属性。 当我更改AVPlayerLayer videoGravity属性视频时立即重新调整大小与动画效果。使用AVSampleBufferDisplayLayer videoGravity,直到我更改设备方向,然后重新调整视频大小而没有动画时,没有任何事情发生。

如何将AVSampleBufferDisplayLayer的videoGravity更改为与AVPlayerLayer类似?

1 个答案:

答案 0 :(得分:0)

我发现的唯一解决方案是重新初始化 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
}