• ベストアンサー

directshowでAVIファイルが再生が出来ません…

Directshowを用いて動画を再生しようと試みています。 Direct sdkとplarformの両方を入れて、インクルードパスとライブラリパスを通しました。 ビルドしてもエラーは無いので某所のシンプルなソースでデバッグ無しで開始をクリック。 すると、再生が終わらないようにメッセージBlock Executionが表示されるものの肝心の動画が映りません。 プログラムはしっかりと動いているはずですが、、 動画aviはMSMPEG4V2です。Directshowのコーデックで動くとのことです。何がおかしいのか、さっぱりです。 環境はwindowsXP visual studio2005 DirectxSDK2008 microsoft platform(しっかりDirectshowフォルダは存在します) ここまで来たなら設定ミスは無いとは思いますが、(設定ミスがあれば、開けない等エラーが出ると思いますので) どうかお願い致します。 サンプルソース ↓ #include <stdio.h> #include <dshow.h> #define FILENAME L"C:\\Documents and Settings\\057104\\My Documents\\homerun2.avi" int main() { IGraphBuilder *pGraphBuilder; IMediaControl *pMediaControl; // COMを初期化 CoInitialize(NULL); // FilterGraphを生成 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder); // MediaControlインターフェース取得 pGraphBuilder->QueryInterface(IID_IMediaControl, (LPVOID *)&pMediaControl); // Graphを生成 pMediaControl->RenderFile(FILENAME); // 再生開始 pMediaControl->Run(); // 再生中にプログラムが終わってしまわないように MessageBox(NULL, "Block Execution", "Block", MB_OK); // 資源を解放 pMediaControl->Release(); pGraphBuilder->Release(); // COM終了 CoUninitialize(); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

まずは自分で調べられるところから 調べてみてはどうでしょう? >pMediaControl->RenderFile(FILENAME); 読み込みは成功しているの? >pMediaControl->Run(); 本当に再生開始できる状態なの? Runの実行結果はどうなっているの?

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc356921.aspx
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

 こんばんは。以下で再生出来ませんか。 // Graphを生成 //↓これはVisualBasic用だそうです //pMediaControl->RenderFile(FILENAME); //↓こっちがC++用 pGraphBuilder->RenderFile(FILENAME, NULL);  http://msdn.microsoft.com/ja-jp/library/cc356929.aspx

noname#189082
質問者

お礼

皆様ありがとうございます. 別のプログラムを起動したら無事再生することはできました.

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

調べたら pMediaControl->RenderFile(FILENAME); の引数はBSTR(=WCHAR*)のようですね ということで#2の回答は間違いです #define FILENAME L"C:\\Documents and Settings\\057104\\My Documents\\homerun2.avi" のままでいいようです

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

MessageBox(NULL, "Block Execution", "Block", MB_OK); これでエラーが出ないのならマルチバイトコードでコンパイルしているということになりますね それなら #define FILENAME L"C:\\Documents and Settings\\057104\\My Documents\\homerun2.avi" は変ですね。 pMediaControl->RenderFile(FILENAME); が失敗してるのだと思います。 どちらの環境でも大丈夫なように #define FILENAME TEXT("C:\\Documents and Settings\\057104\\My Documents\\homerun2.avi") と MessageBox(NULL, TEXT("Block Execution"), TEXT("Block"), MB_OK); にしたほうがいいでしょう。

すると、全ての回答が全文表示されます。

関連するQ&A