AVSampleBufferDisplayLayerはCMSampleBufferを食わせるだけでよしなに映像再生してくれる便利なやつなのですが、バックグラウンドで利用するとすぐ壊れます。
映像が映らなくなったら、layer.error
や、layer.status
を参照するとエラーが出ていたりするはずです。
Ignoring enqueueSampleBuffer: because status is "failed"
というエラーがコンソールに出ることもあります。
基本的にはアプリのアクティブに合わせて、displayerLayerを触らないようにしますがそれでも稀にこれらが発生する事があります。
そのような場合はflushを呼ぶと改善される事があります。
if displayLayer.status == .failed {
displayLayer.flush()
}