C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: C#でDirectShow MPEG→WMV形式変換について


(過去ログ 45 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■24107 / inTopicNo.1)  C#でDirectShow MPEG→WMV形式変換について
  
□投稿者/ 初心者エンジニア (4回)-(2008/08/27(Wed) 22:39:49)

分類:[.NET 全般] 

少々困難であったため、
DirectShowプログラミング経験者にお聞きしたいのですが、

QuartzTypeLibから、
C#(VS2005)よりDirectShowを使用して、

MPEG2ファイル形式からWMV形式に変換するプログラムをつくりたいのですが、

ソースフィルタ → 変換フィルタ → レンダラフィルタ

の流れで、フィルタグラフを作ればいいと思い、
WEB上の他言語(※C#での実装例が少ないため)でのDirectShowを扱ったプログラムを見ていたのですが、

その中で、
レジストリ上からフィルタを登録したり・一覧を取得したりといった
プログラムを書かなければならないと思っているのですが、
自分でC#で実装してみたのですがうまくいきませんでしてた。

以下のサイトを参考にしているのですが、
http://www.geocities.co.jp/SiliconValley/7406/tips/dshow/dshow3.html

サイト上の、
「'レジストリに登録されているフィルタをグラフに追加する」部分のコードは
C#ではどのように実装すればよろしいでしょうか?

私が困っている部分は、
===================
For Each regflt In Grp.RegFilterCollection
===================
のGrp.RegFilterCollectionが
C#では型が厳しいためうまくキャストできませんでした…
(※全然技術ないので…すいません…)

また、困っているのはレジストリ部分だけではありません。
もちろん「MPEG2ファイル→WMVファイルへ変換する」仕様の
C#(他言語でもよい)でのサンプルプログラムなどがあれば教えてください。
引用返信 編集キー/
■24109 / inTopicNo.2)  Re[1]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ Azulean (191回)-(2008/08/27(Wed) 23:24:10)
2008/08/27(Wed) 23:25:44 編集(投稿者)

> また、困っているのはレジストリ部分だけではありません。
> もちろん「MPEG2ファイル→WMVファイルへ変換する」仕様の
> C#(他言語でもよい)でのサンプルプログラムなどがあれば教えてください。
まったくそのまんまではないのですが、フィルタグラフにAddFilterするとかであれば、下記のサイトが参考になるのでしょうか?
http://mobiquitous.com/programming/usbcamera.html

※やりたいことが実現できるかまでは見ていません。


<追記>
前のスレッドでDirectShow.NETを捨ててたのね。orz
引用返信 編集キー/
■24110 / inTopicNo.3)  Re[2]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ Azulean (192回)-(2008/08/27(Wed) 23:35:02)
http://msdn.microsoft.com/ja-jp/library/cc370552.aspx

IAMCollectionで帰ってくるからそれで受ける。
IAMCollectionはforeachにできるかどうか試せていないけど、できるのであればobjectで受ける。できないのであれば、自分でループしてItemメソッドで1個ずつobjectで取り出す。
取り出したobjectをIRegFilterInfoにキャストする。

といったところでしょうか。
引用返信 編集キー/
■24112 / inTopicNo.4)  Re[2]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ 初心者エンジニア (5回)-(2008/08/27(Wed) 23:55:36)
> <追記>
> 前のスレッドでDirectShow.NETを捨ててたのね。orz
返信ありがとうございます。

ボクももちろんDirectShow.NETを使用したかったのですが、
大人の事情ってやつですね。

オープンソースは使っちゃ駄目と
言われちゃいまして…
引用返信 編集キー/
■24113 / inTopicNo.5)  Re[3]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ 初心者エンジニア (6回)-(2008/08/28(Thu) 00:16:04)
No24110 (Azulean さん) に返信
> http://msdn.microsoft.com/ja-jp/library/cc370552.aspx
>
> IAMCollectionで帰ってくるからそれで受ける。
> IAMCollectionはforeachにできるかどうか試せていないけど、できるのであればobjectで受ける。できないのであれば、自分でループしてItemメソッドで1個ずつobjectで取り出す。

C#でも同様にコード書いたのですが、ループできませんでした。
単純に自分でループすれば、いいっすね。
明日やってみます。

今日の仕事中に、
ループできん!!って思って、
違う仕事が入ったので、「うぉ!!できんかった…できんかった…」と思いながら
帰宅したのでトピックを立てさせてもらいました。


> 取り出したobjectをIRegFilterInfoにキャストする。
>
> といったところでしょうか。

というか、
DirectShow、仕様難しいですね…
仕様しっかり抑えないとまずいですね。(何でもそうですけど…)
勘が働きにくいです。
引用返信 編集キー/
■24115 / inTopicNo.6)  Re[3]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ YAS (3回)-(2008/08/28(Thu) 00:29:59)
ループはAzulean さんのおっしゃるやり方で可能です。(試してみました。)
(実はC#よく知らないので適当です。)

FilgraphManager fl = new FilgraphManager();
IAMCollection cl = (IAMCollection)fl.RegFilterCollection;
for (int i = 0; i < cl.Count; i++)
{
IRegFilterInfo reg;
object Obj;
cl.Item(i,out Obj);
reg=(IRegFilterInfo)Obj;
Console.WriteLine(reg.Name);
}

しかし,今後,ファイルに保存するためのSinkFilterの設定ができないという
問題に突き当たると思います。
K.J.KさんのWebページのタイプライブラリやDirectX8.0のサンプルプログラム内にある
DshowForVBLibを使えば可能かもしれませんが,VB用ですのでC#で使えるかはわかりません。

そもそもQuartzTypeLibがVB6をターゲットにしているので,C#ですべてのインターフェイスや
コレクションが使えるかどうか...

一つのインチキなやり方として,GraphEditでグラフを作ってしまい,Grfファイルで保存し,
C#でそれをロードしてRunするというのがあります。

引用返信 編集キー/
■24184 / inTopicNo.7)  Re[4]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ 初心者エンジニア (7回)-(2008/08/29(Fri) 01:10:30)
レジストリからのフィルタ一覧は取得できました。
Azuleanさん、YASさんありがとうございます。

フィルタ情報は取得できたので、
FilgraphManagerにAddSourceFilterなどをして突っ込んで、
一連のフィルタグラフを作成しようと思ったのですが、
型が合わなかったりと戸惑っています。

接続のためにフィルタのピン情報取得などもしなければらならいはずですし…

クラス図とかないので、
クラス間をどうつないでいいかわかんないです。

もちろん他言語でのサンプルはあるため、
概要はつかめるのですが…
C#で組むとうまくいかんす。。。

どこかで、
一連のフィルタグラフを作成しているC#で組んでるサイトないですよね…

今は、
レジストリから取得したFilterを
普通のFilterに置き換えるところで止まっちゃってます。

PIN情報をとるために、PinIDというものを指定するようですが…

Object filterObject;
reg.Filter(out filterObject);
IFilterInfo filterInfo = (IFilterInfo)filterObject;

Object pinObject;
filterInfo.FindPin("????", out pinObject);

また、
YASさんのSinkFilterが必要とのご指摘を受けましたが、
WMVにファイル出力するフィルタは
WM ASF Writerを使うことになりそうです。

その際も、やはりファイル保存のためSinkFilterが必要なのでしょうか?

引用返信 編集キー/
■24186 / inTopicNo.8)  Re[5]: C#でDirectShow MPEG→WMV形式変換について
□投稿者/ YAS (5回)-(2008/08/29(Fri) 02:50:12)
>WMVにファイル出力するフィルタは
>WM ASF Writerを使うことになりそうです。

>その際も、やはりファイル保存のためSinkFilterが必要なのでしょうか?

そうですね。(たぶんですが)WM ASF Writerを使えば,File Writerフィルタは
必要ないと思います。

しかし結局そのWM ASF Writerに出力ファイルを設定するインターフェイスが
ないのではないか,ということをお伝えしたかったのです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -