SSブログ

QTKit Captureを使ってみる - その2 [プログラミング - QTKit Capture]

昨日中途半端な格好で終わってしまったムービー入力のためのFramework、QTKit Captureを使ってみる話。あまりに簡単なのでひょっとしてメモを作る必要もないか、と思ってしまう。

最低限必要なQTKit Captureのクラス

QTKit Captureを使う上で最低限必要なクラスがある。中心的なクラスは

  • QTCaptureSession
  • QTCaptureInput
  • QTCaptureOutput
の三つである。QTCaptureSessionはキャプチャ動作全体を制御する。QTCaptureInputとQTCaptureOutputはQTCaptureSessionが扱える入力と出力を表す抽象クラスで、プログラミング上は具体的なデバイスのを表すインスタンスを作ってQTCaptureSessionに繋ぐ、ということを行う。

他にもっとも簡単な入力動画のプレビューのために

  • QTCatpureView
というNSViewのサブクラスがある。このクラスのインスタンスをウィンドウに貼って、動作可能なQTCaptureSessionを指定してやるだけでプレビューができ、drawRect:などのメソッドを上書きする必要さえない。

同様に

  • QTCaptureAudioPreviewOutput
という、音声のプレビュー用のクラスがある。 また、
  • QTCaptureConnection
と言うクラスがあるが、ただプレビューを表示したりファイルに保存したりするだけなら、おもてには出て来ず、気にする必要はない。

ガイドにはこんな図があって、

大まかなクラスの位置づけが示されている。
  • 入力デバイスは、具体的な個々のデバイスを表すQTCaptureDeviceクラスのインスタンスとして表される。
  • 入力デバイスからのデータはQTCaptureDeviceに繋がったQTCaptureDeviceInputからQTCaptureConnectionを経由してQTCaptureSessionに渡される。
  • QTCaptureSessionの内部でデータの同期が取られて逆向きに繋がったQTCaptureOutputに渡される。
  • QTCaptureOutputには具体的なデバイス(プレビューあるいはファイル)が繋がっていてフォーマットの変換などが行われてデータが渡される。
となっている。 昔苦しめられたもとのSequenceGrabberに比べれば本当に夢のように簡単で、それぞれの機能がクラスとしてまとまっているので、非常にシンプルに見える。

ただし、やはり生のSequenceGrabberを呼ぶのに比べるとオーバーヘッドは大きいようで、PowerBook G4ではプレビューでフレーム落ちが出るなどという問題が起こってしまう。

その他のクラス

QTCaptureInputとQTCaptureOutputを親クラスとする、個々のデバイスに即したデータの入出力ができるようにしたクラスがいくつかある。

入力用のサブクラスとして

  • QTCaptureDeviceInput
があり、出力用として
  • QTCaptureVideoPreviewOutput
  • QTCaptureAudioPreviewOutput
  • QTCaptureMovieFileOutput
  • QTCaptureDecompressedVideoOutput
などがある。 入力のためには、さらに具体的なデバイスそのものを表す
  • QTCaptureDevice
があって、入力のためには、
  1. 実際にMacに繋がっているカメラなどを探して
  2. それに対応するQTCaptureDeviceのインスタンスを作って
  3. QTCaptureDeviceInputに教えてやる
ということをする。入力側はデバイスありき、でそのあとQTCaptureInputのインスタンスを作るようにコードを書かなければいけないけど、出力側はQTCaptureOutputのサブクラスのインスタンスを作るだけになる。これはQTKit CaptureがSequenceGrabberのラッパであり、入力のためのFrameworkなのでさらに複雑な出力にはQTKit Framework本体を使えば良いということであろう。

ガイドにはこれらのQTKitCaptureに属するクラス全体をグループに分類して

グループクラスの例
BaseQTCaptureSession、QTCaptureInput、
QTCaptureOutput、QTCaptureConnection
Input/OutputQTCaptureDeviceInput、QTCaptureVideoPreviewOutputなど
UtilityQTCompressionOptions、QTSampleBufferなど
Device Access and UIQTCaptureDevice、QTCaptureView
としている。

こんな説明でわかった気になるわけはないので、実際の処理の流れとコードを次回示すことにする。ああ、喉が痛い。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立08/21献立08/22 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。