好的,我已经处理了这几天了,而且我无法解决这个问题。
所以,我的传入视频流的每一帧都有一个CVPixelBuffer。没关系。我将它封装在CMSampleBuffer中,一切都很好,非常快。我将它排在AVSampleBufferDisplayLayer上,使用< 4%CPU,它超级快。
但我无法做到这一点。它在YCbCr 4:2:2中,我需要使用RGB24。所以,我浏览了与系统捆绑在一起的各种转换工具 - CoreImage,Accelerate,VideoToolbox - 而且没有什么是那么快。差远了。我得到的最快的是VTPixelTransferSession
,它实际上使用了隐藏的私有加速功能,它的仍然非常慢。只需将缓冲区从原始422复制到新的RGB缓冲区,就可以在我的顶级iMac上使用大约15%的CPU。
我不能得到的是:当然,为了在屏幕上呈现,这个像素缓冲区必须从YCbCr转换为RGB。它一定要是。然而,不知何故,这种转换是远离CPU的,可能是由GPU执行的,我无法弄清楚如何访问。