给定 H.264 的样本缓冲区,有没有办法提取它表示为图像的帧?
我正在使用 QTKit 从相机捕获视频并使用 QTCaptureMovieFileOutput
作为输出对象。
我想要类似于CVImageBufferRef
的东西作为参数传递给 QTCaptureVideoPreviewOutput
委托(delegate)方法。由于某种原因,文件输出不包含 CVImageBufferRef
.
我得到的是一个 QTSampleBuffer,因为我已在压缩选项中设置了它,所以它包含一个 H.264 样本。
我看到在iPhone上,CoreMedia和AVFoundation可以用来创建CVImageBufferRef
从给定的CMSampleBufferRef
(我想这是我能得到的最接近 QTSampleBuffer
的结果) - 但这是 Mac,而不是 iPhone。
CoreMedia 或 AVFoundation 都不在 Mac 上,我看不到任何方法来完成相同的任务。
我需要的是来自输出对象回调给我的 H.264 样本当前帧的图像(无论是 CVImageBufferRef、CIImage 还是 NSImage 都没关系)。
<小时/>扩展信息(来自下面的评论)
我已经发布了一个相关问题,重点关注原始问题 - 尝试使用 QTKit 简单地播放视频样本流:Playing a stream of video data using QTKit on Mac OS X
这似乎是不可能的,这就是为什么我开始尝试通过缩放、压缩和转换 CVImageBufferRef
中的图像数据来获取帧作为图像并创建视频外观。至NSImage
并通过网络将其发送给对等点。
我可以使用QTCapturePreviewVideoOutput
(或解压缩)得到未压缩的帧图像,格式为 CVImageBufferRef
。
但是,这些图像引用需要压缩、缩放并转换为NSImage
在它们对我有任何用处之前,因此尝试使用 QTCaptureMovieFileOutput
从框架中获取已经缩放和压缩的框架(它允许在开始捕获之前设置压缩和图像大小),使我不必执行昂贵的压缩、缩放和转换操作,这些操作会占用 CPU。
最佳答案
Creating a Single-Frame Grabbing Application 是吗?在这种情况下,QTKit 应用程序编程指南的部分对您不起作用?
关于cocoa - 从 H.264 样本数据中提取图像 (Objective-C/Mac OS X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889909/