GUNの備忘録

なんでも忘れないように書いておくよ

*

QuickTime SDK for Windowsで動画再生(2)

   

前の投稿で、aviが再生されない問題はとりあえずあきらめました・・・。
QuickTime Player自身でも再生できないのでプログラムの問題ではなく、単にQuickTimeの対応フォーマットの問題だと思われるためです。対応できていないフォーマットはとりあえずプログラミングとは別問題なのでまた別の機会に検証することにします。

とりあえず動画の再生のところまではこぎつけたので、とりあえず手順を書いておきます。

1.アプリケーションの先頭部分で、QTMLとQuickTimeの初期化を行う。例えばWinMainの先頭で、

 みたいな感じで書いておく。これらの関数は失敗すると返値に0以外の大体負の値が返るので、それでエラー判定をする。

また、後で10msのタイマーを作成するので、タイマーの精度を上げる記述をしておく。

これに対応して、アプリケーション終了時にタイマーの精度を戻しておく。WinMainの最後のreturnの直前にでも入れておけばOK。

2.ウィンドウが作成される時、つまりイベントループのWM_CREATEが来た時にCreatePortAssociationを呼び出し、QTML用のウィンドウを登録する。

3.ファイルの選択ダイアログ等で、動画ファイルが選択された時や、もしくは固定的な動画ファイル名をどこかで開く場合は、1~2の操作が終わった後、次のような感じで動画ファイルをオープンする。(filename[]に動画ファイルのフルパス名が入っているとする)

4.ウィンドウプロシージャの最初の方で、WindowsのイベントをQuickTime側へ渡すコードを書いておく。

5.3の時に作成したタイマー用の処理で、WM_TIMERイベントの処理部分に、MoviesTask関数を記述する。
  (これで描画の更新をしている???。第2パラメータは最大待ち時間??とりあえず50msを指定)

6.ウィンドウ破棄時のイベント処理(WM_DESTROY)時に、タイマーや作成した色々を破棄するコードを記述。

ファイルの選択ダイアログ等を開いて動画ファイルを指定する場合、メニュー選択時のメッセージのWM_COMMANDで開くダイアログのメッセージ(IDM_OPEN等)を受けた時に、上記のDisposeMovieControllerと、DisposeMovieをif文も含めて記述しておくと、ムービーやムービーコントローラーが取得されているときに解放してからファイルを開くダイアログが出るので、解放し忘れがなくなります。(ドキュメントに記載)

とまあこんな感じで書いたら動画を作成したウィンドウ上で再生させることができるまではできたのですが・・・

QuickTimeSDK for Windowsのドキュメントは本当に概要だけで、細かい制御のことは全くといっていいほど載っていないのでこれ以上進めることができませんでした。

だれか書いてくれてないかなーと思ったのですが、本当にWindowsでQuickTimeSDKを使ったプログラミングを解説とかしてくれてるサイトが見つからない・・・。外国のサイトだとちょこちょこあるようなのですがでもあまり多く見つけられない上、断片的なコードしか載っていないものが多く、またほとんどはMacの古いバージョンでのコードが多かったです。QuickTimeSDK自体がかなり古いので仕方がないっちゃそうなのですが・・・。

それで関数名等で検索しているときに見つかったのがGoogleのオンライン書籍(?)で「QuickTime Toolkit Volume One: Basic Movie Playback and Media Types」というものです。歯抜けではあるものの閲覧することができます。
この書籍はAppleが出版しているのかな?とにかく網羅的に書かれているように見えます。英語ですが、リファレンスに使えるレベルだと思います。ただ、電子書籍版の値段が8300円・・・。ちょっと厳しいです・・・orz

しかしWebで検索して出てくる情報が皆無に近い状態のため、歯抜けであってもこの情報はものすごい役立ちます。
たとえば、上記の手順でムービーコントローラーを取得していますが、このムービーコントローラーって一体何に使えるのか全く分からない上、どう使うかもわからないお手上げ状態だったのですが、上記ドキュメント文中を適当に検索してみると、例えば、動画の再生ウィンドウにコントロールバーを表示させようと思ったら、

これでいけるみたいな説明が書いてあり、実際試したらそうなりました。表示を消す場合は上記関数の第2引数をfalseにします。

色々あると思うのですがこれからまた色々調べて書いていこうと思います。

 - 未分類