QTCaptureDevice自我关闭(FaceTime Camera)Mac

时间:2012-01-13 22:21:14

标签: objective-c cocoa

我有一个mac应用程序,它将摄像机数据写入文件,然后将[NSTimer]上的文件上传到服务器。但是,相机运行一段时间后它会自动关闭,我在日志中看到这一点: * QTCaptureDeviceInput警告:设备“FaceTime HD Camera(内置)”已关闭,同时仍在使用捕获会话。在关闭正在使用的任何设备之前,请确保会话未运行。

没有其他应用程序是打开的,可以在测试用例中使用相机,并且我没有释放设备的对象。我已经远远地打电话给保留它以防止这种情况,但无济于事。

我查看了Apple的文档,我发现它没有说明系统关闭相机,所以可能导致这种情况发生。与此同时,我有一些代码可以定期检查它是否已打开以及是否未打开调用。

有一件事我忘记了我正在使用此通知而且它被解雇了:QTCaptureDeviceWasDisconnectedNotification

1 个答案:

答案 0 :(得分:0)

嗯,花了一段时间,但我找到了问题。当您从正在运行的QTCaptureDevice中提取图像数据时,您需要通过以下委托方法处理各个帧。如果在每次运行时都无法正确释放缓冲区,则摄像机最终会自行关闭。请注意以下代码是CORRECt;我附上它来帮助其他人阅读这个问题。希望这能节省一些人花费我的时间......

- (void) captureOutput:(QTCaptureOutput *)captureOutput didOutputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection {
    CVBufferRef bufferToBeReleased;
    CVBufferRetain(videoFrame);
    @synchronized (self) {
        imageBufferToRelease = imageIWanted;
        imageIWanted = videoFrame;
    }
    CVBufferRelease(bufferToBeReleased);
}