2009-04-27 10 views
3

ウェブカメラから録画しています。カメラはPhotoBoothですばらしく見えます。しかし、QTCaptureViewで私のプログラムでプレビューしたり、ファイルに記録したりすると、非常に遅いです。その理由は、QuickTimeが私に最大1600x1200の解像度を与えているからです。私のQTCaptureViewと私の録音ファイルの両方に対してもっと合理的なサイズを強制するにはどうすればいいですか?QTCaptureの解像度を設定しますか?

答えて

7

described hereと同様に、QTCaptureSessionの出力内のピクセルバッファ属性を設定して、キャプチャされるビデオの解像度を変更することができます。たとえば、

[[[myCaptureSession outputs] objectAtIndex:0] setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                   [NSNumber numberWithInt:480], kCVPixelBufferHeightKey, 
                   [NSNumber numberWithInt:640], kCVPixelBufferWidthKey, nil]]; 

は、キャプチャセッションの最初の出力でビデオ解像度を640x480に設定します。また、カメラの設定を調整して、そのサイズの画像フレームを返すようにする必要があります(カメラハードウェアでサポートされている場合)。

また、h.264の代わりにベースのMPEG4エンコードを使用して、リアルタイムのビデオ録画を行うこともできます。これは、次のようなコードを使用して設定することができる。

NSArray *outputConnections = [mCaptureMovieFileOutput connections]; 
QTCaptureConnection *connection; 
for (connection in outputConnections) 
{ 
    if ([[connection mediaType] isEqualToString:QTMediaTypeVideo]) 
      [mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeMPEG4Video"] forConnection:connection]; 
} 

H.264エンコーディング、特にQuickTimeの実装は、ベースMPEG4よりも符号化するために多くのCPUパワーを使用します。

3

上記の解決策(プレビューサイズは正しく設定されていますが、ムービーレコーディングが開始されると、プレビュー画像は元の値(私のMBPでは1280 x 1024)に戻されます)任意の圧縮オプション。

これは映画の録画中に1つのことになりますが、録画が完了するとsetPixelBufferAttributesを呼び出すと何の効果もありません。

実際の圧縮されたムービーの録画を計画していない限り、プレビュー画像のサイズを変更できます。

これは10.5.8/9L30にあり、MBPはGeForce 8600Mです。上記のように、圧縮を行わないか、またはQTCompressionOptionsSD240SizeH264Videoブレークを除くすべての圧縮オプション。

rdar:// 7447812

0

トピックの詳細情報を追加するには:

あなたは直接キャプチャ側の定義をspecifiyすることはできません。むしろ、これは定義を定義するキャプチャセッションの出力です。例えば

  • QtCaptureDecompressedVideoOutputに取り込む場合は、このオブジェクトの定義を指定する必要があります。
関連する問題