Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 从H.264样本数据中提取图像(Objective-C/Mac OS X)_Cocoa_Macos_Video_Qtkit - Fatal编程技术网

Cocoa 从H.264样本数据中提取图像(Objective-C/Mac OS X)

Cocoa 从H.264样本数据中提取图像(Objective-C/Mac OS X),cocoa,macos,video,qtkit,Cocoa,Macos,Video,Qtkit,给定一个H.264的样本缓冲区,有没有办法提取它表示为图像的帧 我正在使用QTKit从摄像头捕获视频,并使用QTCaptureMovieFileOutput作为输出对象 我想要类似于CVImageBufferRef的东西,它作为一个参数传递给QTCaptureVideoPreviewOutput委托方法。由于某些原因,文件输出不包含CVImageBufferRef 我得到的是一个QTSampleBuffer,因为我在压缩选项中设置了它,它包含一个H.264样本 我已经看到,在iPhone上,Co

给定一个H.264的样本缓冲区,有没有办法提取它表示为图像的帧

我正在使用QTKit从摄像头捕获视频,并使用
QTCaptureMovieFileOutput
作为输出对象

我想要类似于
CVImageBufferRef
的东西,它作为一个参数传递给
QTCaptureVideoPreviewOutput
委托方法。由于某些原因,文件输出不包含
CVImageBufferRef

我得到的是一个QTSampleBuffer,因为我在压缩选项中设置了它,它包含一个H.264样本

我已经看到,在iPhone上,CoreMedia和AVFoundation可以用来从给定的
CMSampleBufferRef
创建
CVImageBufferRef
(我想这与我能得到的
QTSampleBuffer
非常接近),但这是Mac,而不是iPhone

CoreMedia和AVFoundation都不在Mac上,我看不到任何方法可以完成同样的任务

我需要的是一个来自H.264样本当前帧的图像(无论是CVImageBufferRef、CIImage还是NSImage都不重要),它是由输出对象的回调提供给我的


扩展信息(来自下面的评论)

我已经发布了一个相关问题,主要关注原始问题-尝试使用QTKit简单地播放视频样本流:

这似乎是不可能的,这就是为什么我开始尝试获取帧作为图像并创建视频外观,方法是将图像数据从
CVImageBufferRef
缩放、压缩并转换为
NSImage
,然后通过网络发送给对等方

我可以使用
QTCapturePreviewVideoOutput
(或解压缩)以
CVImageBufferRef
的形式获取未压缩的帧图像


但是,这些图像引用需要压缩、缩放并转换为
NSImage
s后才能使用,因此尝试使用
QTCaptureMovieFileOutput
(允许在开始捕获之前设置压缩和图像大小)从框架中获取已缩放和压缩的帧,使我不必执行昂贵的压缩、缩放和转换操作,这些操作会消耗CPU。

QTKit应用程序编程指南的部分在这种情况下对您不起作用吗?

QTKit应用程序编程指南的部分在这种情况下对您不起作用吗?

这就是我目前正在做的,但是使用
QTCaptureVideoPreviewOutput
而不是解压缩的,因为我不在乎是否删除帧。目前,我采取的框架,减少其大小,压缩成JPEG格式,然后进行。然而,我宁愿让框架处理压缩和图像压缩,只处理它给我的东西..我刚刚醒来,煮了咖啡(所以不要引用我的话),但我认为上次我读到QTKit时,你可以添加多个输出。显然,速度较慢的系统可能会开始出错,但由于您不担心帧丢失…这是可能的,是的-但我不认为这在这种情况下有什么帮助。我不需要更多的输出,我需要一种更有效的方法,在每次调用回调时获取帧的压缩图像。拜托,你在帖子中没有提到你对该解决方案的认识,所以这是一个有效的答案。我相信你这个问题的答案是“你是索尔”,但不要引用我的话。不过,这是有道理的,因为如果你只是直接转储到一个文件,通常不需要这样做,并且可能因为性能原因而被忽略。我的问题是,我知道使用
CVImageBufferRef
s的方法,这就是单帧抓取应用程序使用的方法。您可能想看看我之前的一个问题,该问题集中在原始问题上-尝试使用QTKit简单地播放视频样本流:-这似乎不可能,这就是为什么我开始获取帧作为图像并创建视频外观。这就是我目前正在做的事,但是使用
QTCaptureVideoPreviewOutput
而不是解压缩的,因为我不在乎是否删除帧。目前,我采取的框架,减少其大小,压缩成JPEG格式,然后进行。然而,我宁愿让框架处理压缩和图像压缩,只处理它给我的东西..我刚刚醒来,煮了咖啡(所以不要引用我的话),但我认为上次我读到QTKit时,你可以添加多个输出。显然,速度较慢的系统可能会开始出错,但由于您不担心帧丢失…这是可能的,是的-但我不认为这在这种情况下有什么帮助。我不需要更多的输出,我需要一种更有效的方法,在每次调用回调时获取帧的压缩图像。拜托,你在帖子中没有提到你对该解决方案的认识,所以这是一个有效的答案。我相信你这个问题的答案是“你是索尔”,但不要引用我的话。不过,这是有道理的,因为如果你只是直接转储到一个文件,通常不需要这样做,并且可能因为性能原因而被忽略。我的问题是,我知道使用
CVImageBufferRef
s的方法,这就是单帧抓取应用程序使用的方法。您可能想看一看我之前的一个问题,该问题集中在原始问题上-尝试使用QTKit简单地播放视频样本流:-这似乎不可能,这就是为什么我开始将帧获取为图像并创建视频外观。从OS X 10.7开始,CoreMedia和AVFoundation可在Mac上使用。从OS X 10.7开始,CoreMedia和AVFoundation可在Mac上使用。