0

次のQTCaptureSessionに2つの入力を追加しようとしています。

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:]-開いていないデバイスでデバイス入力を初期化することはできません。

openメソッドの後で「success」変数を調べましたが、そうです。では、なぜメソッドはデバイスが開いていないと見なすのでしょうか。

4

1 に答える 1

1

まだ答えが見つからない場合、あなたの問題は実際にはあなたが示した2つの上の行にあると思います。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];
于 2009-04-27T01:40:15.180 に答える