- ベストアンサー
directshowのイベント処理
こんにちは。 現在「directshow」を使って動画再生プログラムを作っています。 再生、停止などはできています。 そこで質問があるのですが、ムービーを再生しているウィンドウで処理(マウスクリックやキー入力)を取得したいときはどうすればよろしいのでしょうか? ムービー再生中に画面上でクリック(もしくはキー入力)することでムービーを停止したいと思っているのですが、なかなかうまくいきません。 どなたかご教授いただければ幸いです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- chie65535
- ベストアンサー率44% (8573/19479)
関連するQ&A
- 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が登録されていないかのどちらかだとは思ったのですが、調べる方法もよくわからず・・・ 代替案も色々試してみたのですが、思うような動作をしてくれず、八方ふさがりの状態になってしまったので、投稿させていただきました。 どうか、よろしくお願いいたします。
- ベストアンサー
- SE・インフラ・Webエンジニア
- DirectShowについて
現在、DirectShowについて勉強している者です。 既存の動画ファイルを読み込み、リアルタイムで動画像処理を施し、それをリアルタイムで表示させる所までは成功しました。 この表示させた動画像をファイルとして保存したいのですが、どのようにすれば保存できるのかがわからない状況です。 ちなみに、フレームごとのデータはサンプルグラバフィルタにより取得しております。 知識不足で本当に申し訳ありませんが、少しでも構いませんので、何か助言を頂けると幸いです。 よろしくお願い致します。
- 締切済み
- C・C++・C#
- DirectShowで出来るだけ速くコマ送り
http://www.greenwood.co.jp/~k-aki/article/directshow_movie/directshow_movie.html 上のページの6番の方法を使い、DirectShowから受け取った画像をテクスチャに貼り付けて表示するプログラムを作りました。 コマ送りして連番画像出力をしようと思ったんですが、コマ送りをする方法が分かりません。IVideoFrameStepを使うと等倍速以上ではコマ送りできないみたいなので、何か他の方法は無いでしょうか? 将来的には音声も取得・加工してAVIなどに出力できるようにしたいですが、難しそうなのでとりあえず連番画像出力から作ろうとしています。
- 締切済み
- C・C++・C#
- DirectShowでの動画ファイルの保存方法
DirectShowで再生している動画ファイルを別ファイルに保存するというプログラムを作成しようとしていますが 再生はできたものの動画ファイルの保存方法がさっぱりわかりません まだ初心者なのですがわかりやすく教えていただけないでしょうか?
- 締切済み
- C・C++・C#
- DirectShowでのfilterの作り方
スマートデバイス上で動かす動画処理プログラムを作ろうと思っています。 WindowsMobile 5.0 の機器なのですが、DirectShowのフィルタを自作すれば、目的が達成できるのではないかと考えています。 フィルタは C++ で作るしかないのですよね。。 Windows での開発自体が始めてのため、プロジェクト種類の選択時点で迷っている始末なのですが、参考にすると良いサイトなどがあれば教えてください。
- ベストアンサー
- C・C++・C#
- 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; }
- ベストアンサー
- C・C++・C#
- 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
- 締切済み
- C・C++・C#
- イベント処理の2つの方法
マウスをクリックしたか、キーを入力したかなどのイベントを 補足するための方法として、無限ループなどで調べるやり方と、 イベントリスナー(?)というものを使う方法の2種類あったと思うのですが、 それぞれの手法の一般的な呼び方があったら教えてください。
- 締切済み
- その他(プログラミング・開発)
- 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」を完全に消す、 もしくは、ウィンドウの表示はひとつだけにするためにはどうしたらよいでしょうか? アドバイスよろしくお願いします。
- ベストアンサー
- C・C++・C#
- VB上でのWMPの停止イベントはキャッチできますか?
VB2005を使っている超初心者です。 今、赤外線で信号を受信して、受信情報を元にウィンドウズメディアプレイヤーで動画を流して、終わったらまた赤外線受信処理をするプログラムを作っています。 しかし、受信して動画を再生して停止したときPlayStateChangeイベントで停止するのをキャッチするまではできたんですが、その後自動的に赤外線処理に移行するプログラムができません。 現在はクリックしないと受信が始まらないので、PlayStateChangeを使わずに停止だけをキャッチするイベントはありませんでしょうか? 教えて下さい。 ちなみにPlayStateChangeの停止したときに赤外線処理入れるのもやったんですが、赤外線処理の中で動画のURL指定をするんですが、そのときにプレイヤーの状態が変わるので、またPlayStateChangeイベントが発生するためにデッドロックの状態になりうまく動きませんでした。 よろしくお願いします。
- 締切済み
- Visual Basic
- PC内臓スーピカーから音声が出ない問題について解説します。
- 動画音声やYouTubeの音声が出ない場合の対処法をご紹介します。
- 富士通FMVの内部スーピカーに問題がある可能性があります。
お礼
なるほど、 何となく分かったような気がします。 ありがとうございました。