objective-c - 来自网络摄像头的 cocoa 捕获帧

标签 objective-c cocoa macos video-capture

我正在实现一个软件来从网络摄像头捕获视频。我在 Apple Dev 中看过 MyRecorder 示例,它工作正常。

我尝试使用以下代码添加一个按钮以从视频中截取快照:

- (IBAction)addFrame:(id)sender
{
    CVImageBufferRef imageBuffer;
    @synchronized (self) {
        imageBuffer = CVBufferRetain(mCurrentImageBuffer);
    }
    if (imageBuffer) { 
    [ bla bla bla ]     
    }
}

但是 mCurrentImageBuffer 总是空的。如何从我的网络摄像头获取当前帧并放入 mCurrentImageBuffer?

我试过

(void)captureOutput:(QTCaptureOutput *)captureOutput 
                    didOutputVideoFrame:(CVImageBufferRef)videoFrame 
                    withSampleBuffer:(QTSampleBuffer *)sampleBuffer 
                    fromConnection:(QTCaptureConnection *)connection
{
    CVImageBufferRef imageBufferToRelease;

    CVBufferRetain(videoFrame);

    @synchronized (self) {
        imageBufferToRelease = mCurrentImageBuffer;
        mCurrentImageBuffer = videoFrame;
    }
    CVBufferRelease(imageBufferToRelease);  
} 

但它从未被调用过。如何决定何时调用 captureOutput 委托(delegate)方法? 有什么想法吗?

谢谢, 安德里亚

最佳答案

您似乎正在尝试使用 QTKit Capture API 从您的网络摄像头捕获视频。 MyRecorder 示例应用程序几乎是您可以使用此 API 制作的功能最简单的视频捕获程序。从你的描述中不清楚,但你需要确保你遵循他们的例子,并以与他们在 MyRecorderController 中的 -awakeFromNib 方法中相同的方式初始化你的视频 session 。否则,您将无法捕获任何视频。

就您尝试使用的方法而言,-captureOutput:didOutputVideoFrame:withSampleBuffer:fromConnection:QTCaptureDecompressedVideoOutput 的委托(delegate)方法。 MyRecorder 示例中不存在此类的实例,因为该示例仅将压缩视频记录到磁盘。要使用它,您需要创建一个 QTCaptureDecompressedVideoOutput 实例,使用 -addOutput:error: 将其附加到您的 QTCaptureSession,然后设置QTCaptureDecompressedVideoOutput 实例的委托(delegate)是您的类。

有关 QTKit 如何处理此类事情的更多信息,您可以引用 QTKit CaptureQTKit Application Programming Guide .

关于objective-c - 来自网络摄像头的 cocoa 捕获帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513901/

相关文章:

ios - 我收到一条警告 implicit conversion loses integer precision

ios - 如何从 JSON 查询中获取编码图像并将其编码为 Objective-C 中的 UIImage?

cocoa - 为什么 NSString 和 NSLog 处理 %C 和 %lc(以及 %S 和 %ls)的方式不同?

ios - 如何在 iOS 中生成 32 位 UUID?

objective-c - 强制 NSView 以编程方式重绘

objective-c - 在 mac os x app cocoa 中生成图像文件的问题

iphone - NSURLConnection 和 "chunked"传输编码

objective-c - 在 Cocoa 应用程序上接受拖动的文件

Android - 通过 wifi 使用 adb 连接到设备

python - 打开文件(例如双击文件)的代码