任意のUIViewをPinPに利用しようとすると、CMSampleBufferにUIViewの内容を変換する必要があります。
iOSで任意のUIViewをピクチャーインピクチャーするという素晴らしい記事と実装を公開してくださっているのですが、CMSampleBuffer
への変換方法が少し微妙な気がしたので、そこの部分のみ実装を紹介しようと思います。
実装
実装のポイント
ハマった箇所のみ説明を残しておくと、
kCVPixelBufferIOSurfacePropertiesKey: [:] as CFDictionary
の指定がないと実機で描画されません
UIScreen.main.scale
を利用して、Retinaディスプレイの解像度に耐えるように大きめのサイズでCVPixelBuffer
を作成しています
kCVPixelFormatType_32ARGB
色の順番を間違えると色がおかしくなります