お仕事で
「Windowsで動画再生を行なってください☆」
という依頼が来て、
僕は ((((;゚Д゚)))) こんな状態になった。
それだけならばいいのだけれど、
それを 移動、回転や細かい操作もしたいとのこと。。。
なので、
「テクスチャに動画を貼ればいけるかなぁ・・・
そういえばDirectShowにそんなのあったような・・・」
と、ふとおもった。
なので最終目標は
DIrectXとの併用、テクスチャに動画を貼っつけて描画する。
というところだが・・・
正直やりかたを知らん( ゚д゚ )
学生時代の頃DirectShowを使って動画再生はしていたのだけど
これもびみょうーな理解で終わった・・・
今現在、 DirectShowでウィンドウに再生することは完了。
後はテクスチャにどうにかして貼り付けるだけ・・・
というところだが
知らん( ゚д゚ )( ゚д゚ )
サンプルとリファレンスはゲット済みなので読み解いていけば可能なんだと思うけど
如何せんにわかの僕がいきなりそこまでやるのは難しい・・・
【 (URL) DirectShowリファレンス 】
なので
もっかい最初から DirectShow を読みといていこうと思う!(`・ω・´)
あ、
これはただのメモ帳です・・
なっがたらいリファレンスをノートに書き写す時間もなく、
読むだけでは忘れそうなのでブログに書くという最強戦法を使います。
しかも、この記事、 未 完 です。
書き足すたびに更新をするという・・・
これぞまさしく
タダの メ モ 帳
一応友達とかに分かりやすく教えれるよう
噛み砕いて書いていければいいなと。
そして
「XNA, C# を使えばいいじゃない・・・」と思った人達。。。
正解ですm9( ゚д゚)
ちょっと調べた所、
============================
XNAでは
動画再生 = フレームごとに動画が貼っつけられたテクスチャが帰ってくる
============================
というまさしく神がかりな物があるらしい( ;∀;)
まさしくこれをしたい・・・
---- それをしない理由 それが出来ない理由 ----
① XNA, C#をほぼ知らない → はいはい、終わり終わり。 というかこれしかない。
一度は触ってみたいと思いつつ、
いろいろ手を出しすぎるのも混乱するかと思って触ってなかった。
② なぜか DirectX推しがハンパない。 → なぜだ・・・
新しく XNAをやってもいいんですけど、
DirectShowもすごい気になるので
折角のいい機会なのでこっちでやってみようと思います。
でも一応XNAで同じ事をやってみる予定ですw
これでどれだけの差が出るか楽しみでもありますし、単純に C#覚えたい ( ‘д‘⊂彡☆))Д´) パーン
---- DirectShow ----
【DirectShowの概要】
DirectShowは殆どの動画、音の形式に対応しており、
それらのキャプチャ、フォーマットの変換、再生を行う機能を提供してくれる。
同時に開発者が独自に機能を追加できるよう、基盤となる環境へのアクセスも可能!
なので新しいフォーマットや独自のエフェクトを入れた動画の再生も出来る。
DirectShowを使って作成できるアプリケーションの種類として
・DVDプレーヤー
・ビデオ編集アプリケーション
・ファイルコンバーター
・MP3プレーヤー
・デジタルビデオキャプチャ
等がある。
DirectShowはCOMに基づき作成されている。
【DirectShowでサポートされているフォーマット】
ファイル タイプ
- Windows Media™ Audio (WMA)*
- Windows Media™ Video (WMV)*
- ASF (Advanced Systems Format)*
- Motion Picture Experts Group (MPEG)
- Audio-Video Interleaved (AVI)
- QuickTime (version 2 以前)
- WAV
- AIFF
- AU
- SND
- MIDI
圧縮フォーマット
- Windows Media Video*
- ISO MPEG-4 video version 1.0*
- Microsoft MPEG-4 version 3*
- Sipro Labs ACELP*
- Windows Media Audio*
- MPEG Audio Layer-3 (MP3) (圧縮解除のみ)
- デジタル ビデオ (DV)
- MPEG-1
- MJPEG
- Cinepak
【DirectShowアプリケーションプログラミングの概要】
DirectShowで柔軟な対応をするために "フィルタ" という概念を導入している。
フィルタは様々な種類があり、それぞれ独自の機能を持っている。
・ファイルの読み込み
・ビデオの取得
・様々なフォーマットのデコード( 圧縮ファイルの解凍 )
・グラフィックカード、サウンドカードにデータを渡す( 動画の再生と音の再生になる )
フィルタは入力があり、出力がある。
例えば MPEG-1 ビデオをデコードする場合、
【 入力 】 【 出力 】
MPEGファイル → "デコードフィルタ" → 解答されたビデオデータ
という流れ。
DIrectShow は フィルタ同士を組み合わせて、
あるフィルタの出力を別のフィルタの入力にし、さらにその出力をまた別のフィルタに・・・
とすることで様々な機能を柔軟に提供する。
接続されたフィルタの集まりは「フィルタグラフ」と呼ばれる。
↓の画像は AVI ファイルを再生するためのフィルタグラフを表す。
ソースフィルタと呼ばれるフィルタが ハードディスクから AVIファイルを読み取り、
AVIスプリッタ( 解析機 )でファイルを解析し、圧縮ビデオデータとサウンドデータに分ける。
AVIでコンプレッサフィルタで圧縮ファイルを解凍し、
ビデオレンダラフィルタで DirecrDraw or GDI を使ってディスプレイに描画!
デフォルトDirectSoundデバイスフィルタは DirectSoundを使ってオーディオストリームを再生する!
===================
なるほ・・・
すごい便利!
様々な機能を持ったフィルタをプログラム上で組み合わせてファイルを先頭にぶち込むだけで思ったとおりの結果が出てくるわけか・・・
そしてこれだけでもどういうふうにビデオが再生されていくのかが理解できた。
ありがたいリファレンスだ・・・(´;ω;`)
最高だなぁ!
===================
開発者がこれらを管理する必要はない!
フィルタグラフマネージャと呼ばれる部品が全てのフィルタを制御するので
開発者は再生を行う "Run" や 停止させる "Stop" などのAPIを呼び出すだけで良い!
途中途中で細かく操作したい場合は COMインターフェイスを通して各フィルタに直接アクセスできる。
『フィルタグラフマネージャの機能』
・「ファイルを読み込んだよ!」「再生を開始したよ!」「停止したよ!」
等のイベント通知をアプリケーションに渡してくれる。
・フィルタとフィルタグラフの作成と接続を簡単に行う関数やオブジェクトを提供している。
【DirectShowアプリケーションの作成】
DirectShowを使ったアプリケーションを作成する時にあたり、
しなければいけないことが3つある。
1.フィルタグラフマネージャを作成する。
2.フィルタグラフマネージャを使って、必要な機能を持ったフィルタ同士を繋げてフィ ルタグラフを作成する。
3.フィルタグラフマネージャを使って、フィルタグラフ、およびフィルタを通過する
ここまで!
どんどん追加していく!!
・・・ と思ったけど、なんか長くなりそうだから複数回に分けていく
---- 【参考サイト様】----
本当に有難うございます(´;ω;`) ↓
【(URL) げーむつくろー様 】
後、
今回行なっているDirectShowのプロジェクトと最近やったDirectX関連のプロジェクトを↓に置いております。
最終的にテクスチャに動画を貼ったDirectShowプロジェクトを乗せることができることを夢見て・・・
【 (URL) DIrectX_GoogleDrive 】
※ なんとかテクスチャに貼ることに成功しました!
【 (URL) ブログ記事 】
************************************************************************************
それと、どうでもいいことですけど
だいれくとしょう って打ったらたまに ↓
『 DIrectSHow 』
I と H が大文字。になる。 特に I は頻繁・・・(´;ω;`)
はずかしいわー・・・