• ベストアンサー

WIN32APIで動画を読み込もうとしましたが…

Microsoft visual studio2005のC言語(ウインドウアプリケーション)で動画呼び出しのプログラムを作成して、ビルドもできたのですが開始すると動画が表示せず、 真っ白なウインドウが表示しただけになってしまいます。 呼び出される動画は、Debugフォルダに入れています。 mciSendString( _T("open homerun2.avi type avivideo alias test"), NULL, 0, NULL ); このように命令しているのですが… 動画はWMPで作動するAVIファイルです。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.5

> 早速media player起動で試しましたが圧縮プログラムvids:mp42が見つからないためビデオを利用できません、と表示されました。 それはMicrosoft MPEG4 v2 ですね。MSMPEG4V2は Windows 標準では、DirectShow用コーデックしか入っていませんので、 そのAVIファイルは、DirectShow用のコーデックが入ってるのでWindows Media Player では再生できるが、 Video for Windows 用のコーデックが入っていないため、そのままでは MCI では再生できない、 ということになります。 対策ですが、 ・MCI で再生するのはやめて、DirectShow もしくは ActiveX(Windows Media Playerコンポーネント)で再生するようなプログラムにする ・Video for Windows 用のコーデックをインストールする のどちらかになります。 前者の場合、プログラムの手間(難易度)は高くなりますが、 「VfWコーデックしか入っていないAVIファイルも、VfW経由でDirectShowでも再生できる」ので、データの対応範囲が広くなります。 後者の場合、mp42を再生できるVfWコーデックもいろいろありますが、ffdshow なんかが便利だと思います。 http://cowscorpion.com/Codec/ffdshow.html これを入れて、Media Player(mplay32.exe)で問題のAVIファイルが再生できるようになったことを確認してから、 改めて MCI によるムービー再生にチャレンジしてみてください。

noname#189082
質問者

お礼

directshowを入れてみました。 あと、mpgファイルの動画だと表示することができました。 詳しい説明、ありがとうございました。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

> _T("open homerun2.avi type avivideo alias test"), _T("open homerun2.avi alias test"), としてみてはいかがでしょう 当方の環境ですとこれで『Video for windows』として再生しましたが WinXP SP3 + VC2005

回答No.3

 こんばんは。  私も同じくWMPでは再生出来ましたが、プログラムからは再生出来ませんでした。  別のAVIファイルにした所、再生出来ました。  以下の様にエラー値を確認してみて下さい。 const DWORD dwResult = ::mciSendString( _T("open homerun2.avi type avivideo alias test"), NULL, 0, NULL ); const DWORD dwHi = HIWORD(dwResult); const DWORD dwLo = LOWORD(dwResult); if(dwLo == MCIERR_INVALID_FILE) { /*受け付けない*/ } ::mciSendString( _T("play test"), NULL, 0, NULL);  「MCIERR Return Values」  http://msdn.microsoft.com/en-us/library/ms709467(VS.85).aspx

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

・ファイル名・ファイルのパスはあっていますか?  指定するファイルはカレントディレクトリを基準に参照されますが、  Visual Studio でデバッグ実行している場合は、プロジェクトのあるフォルダがカレントディレクトリの状態で実行されます。  (統合環境からではなく、Debug フォルダ下の実行ファイルを直接ダブルクリックで実行すれば、そのフォルダがカレントになるので、開けると思います。 ・表示させたいムービーのコーデックは大丈夫ですか?  Windows Media Player は、「DirectShow」で動画再生します。  一方、MCI の場合、「Video for Windows」で動画再生します。  再生システムが別物ですので、圧縮コーデックによっては「WMPでは再生できるが、MCIでは再生できないAVI」にもなりえます。  MCI で再生できるムービーかどうかの確認方法ですが、 Windows に標準で付いている「MCI を使ったムービー再生プログラム」である、「Media Player」でそのムービーを開いてみてください。 C:\Windows\System32\mplay32.exe これで見れないのであれば、MCI (Video for Windows)でムービー再生出来ないコーデックを使ったAVIファイルということになります。

noname#189082
質問者

補足

回答ありがとうございます。 早速media player起動で試しましたが圧縮プログラムvids:mp42が見つからないためビデオを利用できません、と表示されました。 今あるAVIファイルでは、厳しいのでしょうか…。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

mciSendString( _T("play test"), NULL, 0, NULL ); は書いてますか?

関連するQ&A