• ベストアンサー

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; }

noname#189082
noname#189082

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

  • ベストアンサー
  • 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

  • C++6.0における動画再生プログラムについて

    動画再生プログラムを作成したのですが、実行するとファイルから選択して動画を再生という形になっています。 ここでやりたいこととしては、実行するとプログラム内で指定したファイルがすぐ再生できるようなプログラムに改良したいと思っています。 どこを改良したらよいかわからないので、どなたか教えていただけませんでしょうか?以下が作成したプログラムです。 #include <windows.h> #include <string.h> #include <dshow.h> //DirectShowのさまざまな準備 #include <conio.h> //getch()用 #include <stdio.h>//インターフェース用のポインタ IGraphBuilder * pigb = NULL; IMediaControl * pimc = NULL; void main (){ OPENFILENAME fname; static char fn [256]; memset ( &fname, 0, sizeof (OPENFILENAME) ) ; fname.lStructSize = sizeof (OPENFILENAME) ; fname.lpstrFile = fn; fname.nMaxFile = sizeof (fn) ; fname.Flags= OFN_FILEMUSTEXIST |OFN_HIDEREADONLY; if ( !GetOpenFileName ( &fname ) ) return ; WCHAR filename [MAX_PATH] ; HRESULT hr; CoInitialize (NULL) ;//ファイル名の変換 MultiByteToWideChar ( CP_ACP, 0, fn, -1, filename, MAX_PATH ) ; //FilterGraphの初期化,GraphBuilderインターフェースを得る hr = CoCreateInstance ( CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**) &pigb) ; if (SUCCEEDED (hr) ){//MediaControlインターフェースを得る pigb -> QueryInterface ( IID_IMediaControl, (void**) &pimc ) ; //再生するファイルを指定 hr = pigb -> RenderFile ( filename, NULL ) ; if (SUCCEEDED ( hr ) ){//再生 pimc -> Run () ; printf ("\n 再生中です、再生終了後どれかキーを押してください.") ; getch() ; } } //FilterGraphの開放 if ( pigb )pigb -> Release () ; if ( pimc )pimc -> Release () ; CoUninitialize () ; return ; }

  • directshow を使用して、mpegファイルを再生するには

    お世話になっております。 directshowを使用して、mpegファイルを再生させようとおもったのです、以下のエラーが発生して、コンパイル出来ません。 c:\Documents and Settings\User\My Documents\Visual Studio Projects\test1\test1Class.cpp(33): fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 何が原因かさっぱり分かりません。 何方かご教授お願い致します。 開発環境は、visualstudio2003(言語C++.net) です。 ソースも載せておきます。よろしくお願い致します。 #include <dshow.h> void main(void) { IGraphBuilder *pGraph; IMediaControl *pMediaControl; IMediaEvent *pEvent; CoInitialize(NULL); // フィルタグラフマネージャを作成し、インターフェイスをクエリする。 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); // グラフを作成。重要: 使用システムのファイル文字列に変更すること。 pGraph->RenderFile(L"C:\\Hello_World.avi", NULL); // グラフの実行。 pMediaControl->Run(); // 終了を待つ。 long evCode; pEvent->WaitForCompletion(INFINITE, &evCode); // クリーン アップ。 pMediaControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); }

  • DirectShowを使用し動画ファイルを再生した時に出てくる「Act

    DirectShowを使用し動画ファイルを再生した時に出てくる「ActiveMovie Window」 を閉じたい 【Directshow, ActiveMovie Window, 閉じる】 DirectShowを使用し動画ファイルを再生した時に出てくる「ActiveMovie Window」 だけを閉じたい場合はどのようにすればよいのでしょうか? 動画処理はフレーム単位で、以下の1~4の処理を繰り返すことで行っています。  1. IMediaSeeking::SetPositions(); // シーク  2. IMediaControl::StopWhenReady(); // シークしてレンダリング  3. IMediaControl::StopWhenReady(); // レンダリング完了を待つ  4. ISampleGrabber::GetCurrentBuffer(); // グラブ 2の処理のところで、 「ActiveMovie Window」が出てきます。 IMediaSeeking, IMediaControl, ISampleGrabber を Release してやればウィンドウも消えるかと思いましたが、別問題のようです。 現在、複数の動画を連続で解析しているため、 「ActiveMovie Window」も複数表示される現象が起こってしまい、困っています。 「ActiveMovie Window」を完全に消す、 もしくは、ウィンドウの表示はひとつだけにするためにはどうしたらよいでしょうか? アドバイスよろしくお願いします。

  • DirectShowを用いたmpgファイルの再生が上手くいかないのですが

    趣味でゲームを作っているものです。ゲームのオープニングムービーでmpgファイルを再生したいのですが上手くいきません。詳細は以下の通りです。よろしくお願いします。 ゲームはウインドウモードで作成 ゲームウインドウ内にmpgファイルを再生 DirectXのバージョン DirectX9.0b ビデオボード GeForce7900GT (ドライバは最新のものを使用) 不具合点  mpgファイルの再生中にウインドウが再描画されたとき(他のウインドウに隠されて た後、再びアクティブにしたり、最小化後最大化など)ムービーの一部あるいは全部 が黒い画面になってしまいます。再描画されなければ上手くいきます。  また、aviファイルであれば、問題なく動作します。 具体的コード <初期処理部> RECT rc; long w,h; //COMライブラリの初期化 CoInitialize(NULL); //GraphBuilder オブジェクトの作成 if(FAILED(CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pBuilder))){ MessageBox(NULL, "GraphBuilder オブジェクトの作成に失敗しました", NULL, MB_OK); return E_FAIL; } //フィルタ・グラフの作成 if(FAILED(pBuilder->RenderFile(L"sample.mpg",NULL))){ MessageBox(NULL, "フィルタ・グラフの作成に失敗しました", NULL, MB_OK); return E_FAIL; } // AVI描画用ウインドウを作成し... if(FAILED(pBuilder->QueryInterface(IID_IVideoWindow,(void **)&pVideoWindow))){ MessageBox(0,"AVI描画用ウインドウの作成に失敗しました",NULL,MB_OK); return E_FAIL; } // メインウインドウの子ウインドウに設定する // ウインドウハンドルの設定 if(FAILED(pVideoWindow->put_Owner((OAHWND)hwnd))){ MessageBox(0,"AVI描画用ウインドウを子ウインドウにすることに失敗しました",NULL,MB_OK); return E_FAIL; } // ウインドウスタイルの設定 if(FAILED(pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS ))){ MessageBox(0,"AVI描画用ウインドウを子ウインドウにすることに失敗しました",NULL,MB_OK); return E_FAIL; } // ウインドウサイズの設定(メインウインドウに合わせる) GetClientRect(hwnd,&rc); w=rc.right; h=rc.bottom; if(FAILED(pVideoWindow->SetWindowPosition(0,0,w,h))){ MessageBox(0,"ウインドサイズの変更に失敗しました",NULL,MB_OK); return E_FAIL; } // メディアコントロールの取得 if(FAILED(pBuilder->QueryInterface(IID_IMediaControl,(void **)&pMediaControl))){ MessageBox(0,"メディアコントロールの取得に失敗しました",NULL,MB_OK); return 0; } // メディアイベントの取得 if(FAILED(pBuilder->QueryInterface(IID_IMediaEvent,(void **)&pMediaEvent))){ MessageBox(0,"メディアイベントの取得に失敗しました",NULL,MB_OK); return 0; } //ウインドウメッセージの受け取り準備 if(FAILED(pBuilder->QueryInterface(IID_IMediaEventEx,(void **)&pMediaEventEx))){ MessageBox(0,"メディアイベントの作成に失敗しました",NULL,MB_OK); return E_FAIL; } if(FAILED(pMediaEventEx->SetNotifyWindow((OAHWND)hwnd,WM_GRAPHNOTIFY,0))){ MessageBox(0,"メッセージの設定に失敗しました",NULL,MB_OK); return E_FAIL; } <コールバック関数にて> long ecode,param1,param2; //DirectShow用 switch(iMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_KEYDOWN: switch((CHAR)wParam) { case VK_ESCAPE: PostQuitMessage(0); return 0; } // DirectShow用 case WM_GRAPHNOTIFY: while(SUCCEEDED(pMediaEventEx->GetEvent(&ecode,&param1,&param2,0))){ switch(ecode){ case EC_COMPLETE: case EC_END_OF_SEGMENT: case EC_WINDOW_DESTROYED: if(FAILED(pMediaControl->Stop())){ MessageBox(0,"停止に失敗しました",NULL,MB_OK); return 0; } GameStartFlag=true; } } break; } return DefWindowProc (hWnd, iMsg, wParam, lParam) ;

  • 動画ファイル(AVI)が急に再生されなくなった困っています。あるソフト

    動画ファイル(AVI)が急に再生されなくなった困っています。あるソフトではこれでAVIファイルではないとも表示されたり、AVIファイル ストリームをレンダリングするための組み合わせがみつかりませんでした、とでたり、directshow filterを追加しなければ再生できません、とでたりしました。 Divx、Directshow filterはいれてあるつもりです。 ファイルにはDivX5.1.1 QB30 120fpsと書いてありました。 どうしたらもとに戻るでしょうか?復元ポイントでしょうか?

  • OpenCVでのavi動画ファイルの指定

     現在Visual Studio 2005とOpenCVを用いて、avi動画を表示させようとしているのですが、ファイルを指定しても無いものと判断され出力できない状況です。同じような質問があったのですが、結局コマンドプロンプトの移動というのがよくわからなかったため分かる方がいたら教えていただきたいです。  avi動画ファイルはC:\\Documents and Settings\\user\\デスクトップ\\a.aviにあり、以下のプロジェクトファイルはC:\Documents and Settings\user\My Documents\Visual Studio 2005\Projects\cv\cvにあります。 //--------------------------------------------------------- // 概要 : 動画(aviファイル)読み込み // File Name : LoadVideo.cpp // Library : OpenCV for MS-Windows beta5 // Auther : Yasuhiro Yoshimura // Date : Dec 26, 2005; 22:22 //--------------------------------------------------------- #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <stdio.h> //読み込む動画ファイル名 char* filename="C:\\Documents and Settings\\user\\デスクトップ\\a.avi"; //IplImage IplImage* src; int main(){ CvCapture* capture = NULL; int key; //キー入力 //指定したAVIファイルが見つからない場合 if(NULL==(capture = cvCaptureFromAVI(filename))){ fprintf(stderr,"指定のaviファイルが見つかりませんでした."); return -1; } //画像表示ウィンドウの準備 cvNamedWindow("Source Image", CV_WINDOW_AUTOSIZE); //画像表示ウィンドウの出現位置指定 cvMoveWindow("Source Image", 50, 50); //処理ループの開始 for(;;){ //AVIファイルからフレーム画像を取り出す if(NULL==(src=cvQueryFrame(capture))){ break; } //画像表示 cvShowImage("Source Image", src); //キー入力 key = cvWaitKey(10); //ESCキーを押すと終了 if(key==0x1b) break; } //解放 cvReleaseCapture(&capture); cvDestroyWindow("Source Image"); return 0; } よろしくお願いします。

  • Windows7でDirectShowを使おうとしているのですが・・・

    Windows7でDirectShowを使おうとしているのですが・・・ こんにちは、今、プログラムのことで困っていまして、もしわかる方がいらっしゃったら教えていただきたいのですが・・・ 【解決したい問題】 WindowsXPで使っていたプログラムをWindows7で実行させた時、DirectShowの、IMixerPinConfigの生成に失敗する。 【詳細】 先日、新しいパソコン(Windows7)を買って、前のパソコン(WindowsXP)で使っていた、動画を再生するプログラムを、Windows7で使おうとしたのですが、プログラムが起動してすぐにエラーが出てしまい、使うことが出来ませんでした。 そのプログラムは、「VB.NET FrameWork 2.0」で作成したプログラムで、「DirectShow」を使ってDVDから動画を再生しているのですが、ソースをステップごとに追いかけて調べてみると、アスペクト比を変更して、動画の黒い帯(レターボックス)を取るために使用していた、「IMixerPinConfig」というオブジェクトの生成が失敗していました。 「IMixerPinConfig」の生成に使っているのは、「DvdGraphBuilder」というクラスの「GetDvdInterface」という関数で、引数に「IMixerPinConfigのGUID」と、「取得したオブジェクトの格納用の変数」を渡していて、正常に処理されていれば、戻り値で0が返ってくるところが、&H80004002という値が返ってきて、out側の結果は、Nothingで返ってきたため、恐らくそこが原因なのだろうという所はつきとめました。 そして、DirectShowのソースを見ていくと、残念ながら、関数の中身は見ることが出来ませんでしたが、「GetDvdInterface」では、GUIDから、オブジェクトの取得を行っているのではないかと推測したので、問題が発生している箇所の前後で、同じ処理を使って、「IDvdInfo」、「IDvdControl」、「IBasicAudio」等の取得も行ったのですが、こちらは正常に処理されました。 ただ、正常に処理されはしたのですが、ブレークを打って確認しても、それぞれのGUIDの値が、「IMixerPinConfig」も、正常に処理された「IDvdInfo」等の値も、両方Emptyという表示になっていたので、何がなんだかわからなくなりまして・・・ 恐らくGUIDの読み込みで失敗しているのか、GUIDが登録されていないかのどちらかだとは思ったのですが、調べる方法もよくわからず・・・ 代替案も色々試してみたのですが、思うような動作をしてくれず、八方ふさがりの状態になってしまったので、投稿させていただきました。 どうか、よろしくお願いいたします。

  • RENDERFILEについての質問です

    今現在、DIRECTSHOWで動画でいろいろしてみようと思ったのですが、壁に当たりました。 デバッグ無しで開始すると、 RenderFile hr 40258と表示されます。 ソースですが関連するところを書くと #include <windows.h> #include <string.h> #include <dshow.h> // DirectShowのヘッダファイル #include <qedit.h> // SampleGrabber用 #include <conio.h> // getch()用 #include <stdio.h> #include "list502.h" #pragma warning(disable:4996) void main( void ) { // インターフェース用のポインタ // フィルタグラフ用 IGraphBuilder *pigb = NULL; IMediaControl *pimc = NULL; IMediaSeeking *pims = NULL; // サンプルグラバ用 IBaseFilter *pF = NULL; ISampleGrabber *pGrab = NULL; // これらは後で解放すること。 IMG0 img00; // 表示ウィンドウ用の構造体 BYTE *buffer; // 外部バッファ AM_MEDIA_TYPE amt; WCHAR filename[ MAX_PATH ]; HRESULT hr; img00.hi = (HINSTANCE)GetWindowLong( HWND_DESKTOP, GWL_HINSTANCE ); img00.x = 100; img00.y = 100; gr_reg(); // 表示用ウィンドウの登録 CoInitialize(NULL); // COMの準備 // FilterGraphの初期化 CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pigb); // フィルタグラフのインターフェースを得る pigb -> QueryInterface( IID_IMediaControl, (void **)&pimc ); pigb -> QueryInterface( IID_IMediaSeeking, (void **)&pims ); // グラバフィルタを作りフィルタグラフに追加 CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (LPVOID *)&pF); pF -> QueryInterface( IID_ISampleGrabber, (void **)&pGrab ); pigb -> AddFilter( pF, L"SamGra" ); // グラバフィルタの挿入場所の特定のための設定 ZeroMemory( &amt, sizeof(AM_MEDIA_TYPE) ); amt.majortype = MEDIATYPE_Video; amt.subtype = MEDIASUBTYPE_RGB24; amt.formattype = FORMAT_VideoInfo; pGrab -> SetMediaType(&amt); OPENFILENAME fname; static char fn[256]; memset(&fname, 0, sizeof(OPENFILENAME)); fname.lStructSize = sizeof(OPENFILENAME); fname.lpstrFile = fn; // パス付きファイル名が格納されるアドレス fname.nMaxFile = sizeof(fn); fname.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( ! GetOpenFileName( &fname ) ) return ; // ファイル名の変換 MultiByteToWideChar( CP_ACP, 0, fn, -1, filename, MAX_PATH ); // 再生するファイルを指定、この時点で使用するフィルタが決まる hr = pigb -> RenderFile( filename, NULL ); printf( "RenderFile hr %x\n", hr ); if(hr != 0) return; ポイント箇所は WCHAR filename[ MAX_PATH ]; hr = pigb -> RenderFile( filename, NULL ); printf( "RenderFile hr %x\n", hr ); hrが0だと、成功を意味していると思います。それ以外だとリターンで終了します。 強引にhr=0で強引に0にしてみたら Just-in-Timeで例外が発生しました。これは強引に0にしたからだと思います。 %xは16進数を意味しているはずです。 余談ですが、動画ファイル以外(テキストファイルなど)を開くと hr=80040625と出ます。 この数字(16進)はエラーコードなのでしょうか? どうかhrが40258になってしまう理由および解決策をお教え下さい。 お願いいたします。

  • DirectShowで作成した動画がうまく見れない

    現在、Visual Studio2010のC++で、webカメラで撮影した動画をDirectshowを使ってaviファイルとして保存するようなプログラムを書いているのですが、ここで出力されたaviファイルをQuicktimePlayerで再生しようとすると、音声のみが流れて画面は真っ黒という状態が起きてしまいます。 再生のため、一通りのコーデック(ffdshow,DivX等)をインストールして再生を試みたのですが、全く変化がありません。 また、DirectShowで動画作成時に圧縮を行う際には"x264vfw - H.264/MPEG-4 AVC codec"を使用しました。 一応のため、作成した動画を真空波動研で調べてみた結果 +++++++++++++++++ [h264.avi] 640x480 24Bit H.264 30.00fps 233f 1809.00kb/s PCM 44.10kHz 16Bit 2ch 1411.20kb/s [RIFF(AVI2.0)] 00:00:07.766 (7.766sec) / 3,195,904Bytes h264.avi / DLL 110813 Unicode +++++++++++++++++ という内容となりました。 どうにかして出力されたaviファイルをQuickTimePlayerで見れるようにしたいと考えています。 再生部分の問題なのか、保存部分の問題なのか全くわからない状態です・・・ かなり限られた状況なので、難しい質問かもしれませんが、何か解る方がいらっしゃいましたらご教授お願いします! また、動画圧縮時に他にもいろいろなコーデックを試してみたのですが、その中にもQuicktimePlayerで見れるものと見れないものが存在しました。 手掛かりになる情報かどうかはわかりませんが、それも記述しておきます。 (×:見れないもの) Microsoft Windows Media Video 9 Microsoft MPEG-4 Video Codec V3 DivX 6.9.2 Codec (4 Logical CPUs) (○:見れるもの) Intel IYUV コーデック MJPEG Compressor Microsoft Video 1

  • Direct Show(x64)でのエラー

    お世話になります。 現在x64版のDirect Showを利用して、aviファイルから任意のフレーム画像を取得する プログラムを作成しております。 Direct Showは今まで使ったことが無かったのですが、ネットにあるサンプルなどを 参考に手探りで作業を進めております。最終的にはx64版を作る必要があるのですが、 メインで作業しているPCが32bit環境であるため、とりあえずx86版で作業を進め、 なんとか期待する動作をするものが出来ました。 最終的に処理する動画ファイルは1440x810のものと、3840x2160の2つがあり、 x86版ではどちらも期待する動作をしてくれるのですが、x64にてコンパイルし64bit環境で 動作させると1440x810の方は問題ないのですが、3840x2160の方はうまく動作しません。 なお、プログラムは以下のような流れでDirectShowを利用しております。 CoInitialize CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, &pIGB); pIGB->QueryInterface( IID_IMediaControl, &pIMC ); pIGB->QueryInterface( IID_IID_IMediaSeeking, &pIMS ); CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, &pIBF ); pIBF->QueryInterface( IID_ISampleGrabber, &pISG ); pIGB->AddFilter( pIBF, NULL ); pISG->SetMediaType(&stMT); // stMTはMEDIATYPE_Video,MEDIASUBTYPE_RGB24,FORMAT_VideoInfoを設定 pIGB->RenderFile( ファイル名, NULL ); : 調べてみると、RenderFileのところでx64の場合はVFW_E_NO_TRANSPORTが帰ってきているようです。なお、その64bit環境でx86コンパイルしたものを動かすと問題なく動作します。 なお、もともとDirect X SDK 9.0を使っていましたが、念のため最新版のものをダウンロードして 試してみましたが、症状は変わりませんでした。また、Videoドライバも変えてみましたが、同様に 変化なしです。 どんな原因が考えられるか、どなたかご助言頂ければ助かります。 なお、開発環境・動作環境は以下の通りです。 Windows 7 Pro 64bit版 VisualStudio 2010 Pro Direct X SDK 9.0 or Direct X Jun_2010 C++ (純粋なネィティブプログラム)

専門家に質問してみよう