2

私は単純なビデオ メッセンジャーのようなアプリケーションを作成しているため、使用可能な帯域幅に収まり、キャプチャされた画像が歪まないようにするために、ある程度妥協したサイズのフレームを取得する必要があります。

フレームを取得するには、QTCaptureVideoPreviewOutput クラスを使用しています。didOutputVideoFrame コールバックでフレームを正常に取得しています。(生のフレームが必要です-主にカスタムエンコーダーを使用しているため、「生のビットマップ」を取得したいだけです)。

問題は、これらの新しい iSight カメラの場合、文字通り巨大なフレームが得られることです。

幸いなことに、生のフレームをキャプチャするためのこれらのクラス (QTCaptureVideoPreviewOutput) には、取得するフレームの種類を指定できるメソッド setPixelBufferAttributes が用意されています。幸運にもカメラがサポートするフレーム サイズを推測できた場合は、それを指定できます。QTKit はカメラをこの指定されたモードに切り替えます。運が悪いと、画像がぼやけてしまい (拡大/縮小されたため)、ほとんどの場合、不均等になります。

私はlists.apple.comとstackoverflow.comを検索してきましたが、答えは「Appleは現在、カメラのネイティブフレームサイズを取得する機能を提供していません」です。まあ、それについて私ができることは何もありません。

設定で最も一般的なフレーム サイズを提供する必要があるかもしれません。しかし、これらの一般的なフレームサイズは何ですか? UVC カメラが通常生成するフレーム寸法のリストはどこで入手できますか?

アプリケーションをテストするために、UVC 準拠のカメラを使用していますが、iSight は使用していません。すべてのユーザーが iSight を使用しているわけではないと思いますが、モデルが異なっていても、iSight カメラのフレーム寸法が異なることは確かです。

または、カメラをデフォルト モードに切り替えて、いくつかのフレームを生成し、生成されるサイズを確認する必要があります。これは本当のハックのように見え、自然ではないようです。そして、画像はおそらく再びぼやけます。

この問題にどのように対処しましたか?私はそれに直面した最初の人ではないと確信しています。どのようなアプローチを選択しますか? ありがとう、ジェームズ

4

1 に答える 1

0

そうです、iSight カメラは巨大なフレームを生成します。ただし、ピクセル バッファー属性を設定してカメラを別のモードに切り替えることはできないと思います。多くの場合、QTCaptureVideoPreviewOutput でフレームを処理するモードを設定します。まだ行っていない場合は、QTCaptureDecompressedVideoOutput を見てください。また、サンプル バッファを使用してフレーム サイズを取得します。だから、私はそれがハックだとは言いません。より自然な方法は、独自のエンコード アルゴリズムを実装する独自の Quicktime コンポーネントを作成することです。この場合、Quicktime はキャプチャ セッション中に QTCaptureMovieFileOutput 内で使用できます。それは適切ですが、難しい方法でもあります。

于 2011-08-26T05:29:29.210 に答える