QTKit,打开输入设备?

发布于 2024-07-14 14:06:56 字数 1141 浏览 12 评论 0原文

我试图在以下内容中向 QTCaptureSession 添加两个输入:

mainSession = [[QTCaptureSession alloc] init];

BOOL success;
NSError* error;

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"];
success = [videoDevice open:&error];

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"];
success = [audioDevice open:&error];

//video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice];
//success = [mainSession addInput:video error:&error];

//audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
//success = [mainSession addInput:audio error:&error];

output = [[QTCaptureMovieFileOutput alloc] init];
success = [mainSession addOutput:output error:&error];

[output setDelegate:self];

[movieView setCaptureSession:mainSession];

[mainWindow makeKeyAndOrderFront:NSApp];

[mainSession startRunning];

我已确定注释掉的部分是错误的来源:

[QTCaptureDeviceInput initWithDevice:]- 无法使用未打开的设备初始化设备输入。

我在开放方法之后探测了我的“成功”变量,结果是肯定的。 那么为什么该方法认为设备未打开呢?

I'm trying to add two inputs to a QTCaptureSession in the following:

mainSession = [[QTCaptureSession alloc] init];

BOOL success;
NSError* error;

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"];
success = [videoDevice open:&error];

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"];
success = [audioDevice open:&error];

//video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice];
//success = [mainSession addInput:video error:&error];

//audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
//success = [mainSession addInput:audio error:&error];

output = [[QTCaptureMovieFileOutput alloc] init];
success = [mainSession addOutput:output error:&error];

[output setDelegate:self];

[movieView setCaptureSession:mainSession];

[mainWindow makeKeyAndOrderFront:NSApp];

[mainSession startRunning];

I've determined that the commented out part is the sources of the error:

[QTCaptureDeviceInput initWithDevice:]- cannot intialize device input with device that is not open.

I've probed my "success" variable after the open methods and it is yes. So why does the method think the device isn't open?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里寻她 2024-07-21 14:06:56

如果您还没有找到答案,我认为您的问题实际上出在您指出的两行上方。 我检查了 Apple 的文档,发现 QTMediaTypeSound 和 QTMediaTypeVideo 是常量,而不是您应该手动传入的字符串。例如,快速的 NSLog() 语句显示 QTMediaTypeVideo 常量实际上等于“vide”。

简而言之,您的代码应该是:

mainSession = [[QTCaptureSession alloc] init];

BOOL success;
NSError* error;

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
success = [videoDevice open:&error];

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound];
success = [audioDevice open:&error];

video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice];
success = [mainSession addInput:video error:&error];

audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
success = [mainSession addInput:audio error:&error];

output = [[QTCaptureMovieFileOutput alloc] init];
success = [mainSession addOutput:output error:&error];

[output setDelegate:self];

[movieView setCaptureSession:mainSession];

[mainWindow makeKeyAndOrderFront:NSApp];

[mainSession startRunning];

If you haven't found an answer yet, I think your problem is actually in the lines above the two you indicated. I checked Apple's documentation, and found that QTMediaTypeSound and QTMediaTypeVideo are constants, not strings you should manually pass in. A quick NSLog() statement reveals, for example, that the QTMediaTypeVideo constant is actually equal to "vide".

In short, your code should be:

mainSession = [[QTCaptureSession alloc] init];

BOOL success;
NSError* error;

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
success = [videoDevice open:&error];

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound];
success = [audioDevice open:&error];

video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice];
success = [mainSession addInput:video error:&error];

audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
success = [mainSession addInput:audio error:&error];

output = [[QTCaptureMovieFileOutput alloc] init];
success = [mainSession addOutput:output error:&error];

[output setDelegate:self];

[movieView setCaptureSession:mainSession];

[mainWindow makeKeyAndOrderFront:NSApp];

[mainSession startRunning];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文