割り込み作業が多くて、全然進みません(笑
2008年4月16日水曜日
Sequence Grabberの生成
まずWhackedTVの初期化処理から、Sequence Grabber Componentの生成方法を理解。
WhackedTVのメインウインドウのdelegateはWhackedTVControllerクラスなので、アプリケーションを起動するとこのクラスのinitが最初に呼ばれ、起動が完了するとapplicationDidFinishLaunching:が呼ばれる。
initで行っている処理は、
・SeqGrabクラスの生成と初期化
・レコーディング動作中の動作確認用タイマーのタイマー時間設定
・通知の設定
・プレビューのクオリティーとフレームレートの設定
で、もちろん重要なのはSeqGrabクラスの生成と初期化。初期化で使用しているAPIは
・OpenADefaultComponent
・SGInitialize
の2つ。
OpenADefaultComponentはComponent ManagerのAPIで、ComponentInstanceで定義される様々なリソースが取得できる(んだよね?)。Sequence Grabber Componentを取得するには、SeqGrabComponentTypeを指定してやれば良い。SGInitializeはその名の通り、取得したSequence Grabber Componentの初期化を行う。
ラベル: objective-c, sequence grabber
WhackedTVに含まれるSeqGrabについて
WhackedTVのプロジェクトにはCocoaでSequence Grabberを使うためのWrapperクラスが入ってる。ディレクトリSeqGrab内のクラスがそれだ。Wrapperクラスを自分なりに解釈すると、
・SeqGrabクラス
Sequence Grabber ComponentのCocoa Wrapper。プレビューやレコーディングの設定など、キャプチャのメイン機能を担う。
・SGChanクラス
Sequence Grabber Channel ComponentのCocoa Wrapperで、以下のSGVideo、SGAudioクラスのスーパークラス。
・SGVideoクラス
SGChanクラスを継承し、Channel Componentの中でVideoMediaTypeなChannelを制御するクラス。
・SGAudioクラス
SGChanクラスを継承し、Channel Componentの中でSGAudioMediaTypeなChannelを制御するクラス。
・ SampleCIViewクラス
NSOpenGLViewを継承し、プレビュー描画を行うクラス。SGVideoで取得したイメージデータを渡すとウインドウに描画を行う。描画はOpenGLで行っている。
という感じ。
Cocoaアプリケーションでキャプチャソフトを作成する場合は、上記クラスをベースにし、適時にメソッドを追加するという流れになる。
ラベル: objective-c, sequence grabber
2008年4月15日火曜日
WhackedTVの機能
WhackedTVの機能について簡単にまとめると
・[add video track]で利用可能なビデオデバイスをキャプチャ要素に追加
・[add audio track]で利用可能なオーディオデバイスをキャプチャ要素に追加
・キャプチャ要素を追加するとテーブルに追加される
・テーブルにある[settings]でデバイスの設定ができる
・[record]で指定パスにQuicktime形式のムービーが書き出される
という感じ。さらっとソースと照らし合わせて動作確認してみると、[settings]で表示されるダイアログは、ビデオデバイスだと標準の機能として備わっているようだけど、オーディオデバイスではQuickTime7時点で提供されていないから、自分で実装するしかないみたい。事実、WhackedTVではSGAudioSettingsクラスでダイアログとかオーディオメーターを実装している。みるからに大変。あと大きく違うのはファイル書き出しをしているところ。demuxされた状態でメモリ上に展開する方法をしらべなきゃ。
ラベル: objective-c, sequence grabber
Sequence Grabber の資料
まずは資料集めから。参考となりそうなのは
Sequence Grabber Reference for QuickTime
と、
QuickTime Movie Creation Guide
あたり。
あと一番重要なのがAppleが提供してるサンプルコードで、WhackedTV。これからはこのサンプルコードを解析していくことから始める。
ラベル: objective-c, sequence grabber
Sequence Grabber でキャプチャ
Macでキャプチャソフトを作るのには、Sequence Grabber というコンポーネントを使用するらしい。Macでの開発全般に言えることだけど、参考となりそうな資料は全て英語。そしてリファレンスも不十分で、サンプルコードから動作を紐解かなければならないことが多い。覚え書きの意味も含め、Sequence Grabber の機能とかその辺を書いていこうと思う。
作成するキャプチャソフトは
デバイスが選択できて、映像と音を別々に、メモリ上に展開できること
を目的とします。
ラベル: objective-c, sequence grabber