:RenderStreamでフィルタ接続

2010/09/16

さて、前回の話の続きで、
RenderStreamを使った場合の4つのフィルタを接続して動かす方法。



連結するフィルタを先頭に指定して、再度RenderStreamを呼び出せばOK。

1回目:ソース → 映像解析 → 静止画取得
2回目:静止画取得 → null → null(最後をnullにすると自動でレンダラに繋がる)

4つしか試していないが、こんな感じで大量のフィルタを接続可能だと思われる。

単純な理屈だが、2回目は指定するピンカテゴリを変更しないと動作しないので
それに気がつかず今まで使っていなかった(´・ω・`)


以下、DirectShowLib-2005.dllを使った自作C#ソースの抜粋。
----------------------------------------------------------------------------------------
//1回目の接続。ピンカテゴリをCaptureに指定。
hr = icaptureGraphBuilder2.RenderStream(PinCategory.Capture,
MediaType.Video, cameraFilter, analyzeFilter, sampleGrabberFilter);

//エラー出力。
DsError.ThrowExceptionForHR(hr);

//2回目の接続。ピンカテゴリはnull ←これが重要。
hr = icaptureGraphBuilder2.RenderStream(null,
MediaType.Video, sampleGrabberFilter, null, null);

//エラー出力。
DsError.ThrowExceptionForHR(hr);
----------------------------------------------------------------------------------------

2010/09/16 18:00
コンピュータC# Tips

ID:4258

COMMENT

初めて投稿いたします。今まさにPC-SDVD/U2Gを使って垂れ流し画像の
システムを構築しようとしております。かなり難しいお願いかとは思いますが、
//1回目の接続。ピンカテゴリをCaptureに指定。
hr = icaptureGraphBuilder2.RenderStream(PinCategory.Capture,
MediaType.Video, cameraFilter, analyzeFilter, sampleGrabberFilter);

//エラー出力。
DsError.ThrowExceptionForHR(hr);

//2回目の接続。ピンカテゴリはnull ←これが重要。
hr = icaptureGraphBuilder2.RenderStream(null,
MediaType.Video, sampleGrabberFilter, null, null);

//エラー出力。
DsError.ThrowExceptionForHR(hr);
このロジック部分を実装する方法を教えて頂きたく投稿いたしました。(抜粋部分を含んだソースが見たいのです)
私はビデオ等の読込の仕組みは詳しくないのですが、担当になってしまいました。本当にぶしつけなお願いで申し訳ありません。隊長さんというお名前が示すようにきっとリーダー的な男気のあるかただと思いますので、是非この困った中年を助けて下さい。出来るレベルのお礼は致します。
宜しくお願い致します。
2012/06/06 21:56
お役に立てるかどうかは不明ですが、サンプルを用意しました。
DirectShowLib-2005.dll付属のサンプルを自分流に簡略化しただけですが(;・ω・)ゞ

http://www.gan.st/gan/soft/...

開発環境はC#2008 Express Edition SP1です。2010でもいけると思います。
もし必要としているのが他の言語だったらゴメンナサイ。
当のPC-SDVD/U2Gを今は使っていないので実物でテストしてませんが
当時と同じコードなので動くと思います。

カメラのスタート、ストップ、静止画取得の3つの機能に絞っています。
とりあえずお試しください。
2012/06/07 10:49
早速のご回答本当に感謝します。手元にはデバイスがないので、試してはいませんが、確認後必ずまた投稿いたします。
2012/06/08 02:39
こんばんは。
隊長GUN-STさん。最高!!!です。
メールでも速報したようにばっちり動きましたよ。
VB.NETでもロジックは「OK」!!
しっかりビデオ画像が流れて感動でした。
お住まいは北海道のほうなんですね。
機会があれば観光がてらごあいさつしたいです。
それくらい本当に助かりました。
2012/06/09 00:37
C#とVB.NETは基本同じですからね。
DirectShow系の開発は情報なくて自分も苦労しましたから、
こんな田舎のブログでもお役に立てたなら幸いです(*゚ー゚)

別にお礼やご挨拶はいりませんよ。助け合いの心です(;・ω・)ゞ
2012/06/09 11:20
おはようございます。
GUN-STさん、今回は心から感謝しております。本当にありがとうございました。
2012/06/10 08:27
初めましてこんにちは。
ビデオ出力関係は無知のVB.net使いです。
GUN-ST様のサンプルのおかげで私も本当に本当に助かりました、ありがとうございました。
当方Win7,VB2010 Express Edition SP1で無事に動作しております。
実はクライアントから録画が必要と言われ困っております。時間があいた時で構いませんので圧縮→保存する方法をご享受ください。参考できるURLなどでもかまいません。DirectShowの参考はC++が多くて中々難解です。
藁をもすがる思いで…。どうぞよろしくお願いいします。
2014/09/29 15:17
サンプルに録画機能を追加してみました。

http://www.gan.st/gan/soft/20140929_DirectShow_CameraSample.zip

だいぶ昔に作ったAVI録画用ソースを使っているので
今どきのMP4などには対応してませんが、MJPEGなどなら使えます。
開発のとっかかりにでもなれば幸いです(*゚ー゚)
2014/09/29 17:53
お礼のお返事が遅れまして申し訳ありません!!
必死で出産してました(^^;
どれほどのお礼を申し上げればいいのか…ほんとうにありがとうございました。
無事に録画が開始されました(感涙)
圧縮がとても大きくなってしまうのですが、そこは勉強して何とかしてみます。
本当に本当にありがとうございました。
また何かありましたらお知恵をお貸しください、よろしくお願いいたします。
2014/10/07 15:52
▼たまみさん
ご出産おめでとうございます(≧▽≦)ノシ

返事が遅かったとか気にすることないですよ(・∀・)
今回作ったサンプルもちょうど仕事で近い部分をいじっていたついでですから…。

毎度お役に立てる保障はありませんが、
何かこまったことがあればお声をおかけください(;・ω・)ゞ
2014/10/07 21:25

ADD COMMENT

TRACKBACK LIST


このエントリにトラックバックはありません

TRACKBACK URL


http://www.gan.st/gan/blog/action.php?action=plugin&name=TrackBack&tb_id=4258