DirectShowと戦うスレ Part 2
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/11/08(水) 00:25:56http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0940デフォルトの名無しさん
2008/02/13(水) 22:46:42レンダラ、ライタまでたどり着けるかはシステムに拠りますね。
0941デフォルトの名無しさん
2008/02/13(水) 23:16:38ありがとうございます。
あるフォルダの中から、DirectShowで表示できるファイルだけを列挙したいのですが、
できればDirectShowにRenderさせる前に、DirectShowでサポートされているか拡張子で判断したいのです。
理由は判断ロジックのパフォーマンス確保のためです。
(この時、拡張子がrmなのに中身はwmvだった、という例外は除外してOKです。)
ファイル数が500個あった場合に、DirectShowにRenderさせてS_OKだったら、
これはサポートファイルであるという判断は時間がかかります。
もしくは、サクッとDirectShowサポートファイルか判断する手段はありますでしょうか?
0942デフォルトの名無しさん
2008/02/13(水) 23:42:33コンテナとコーデックの違いを理解しましょう
0943デフォルトの名無しさん
2008/02/13(水) 23:46:01そこにDivXの映像入りのAVIがあったとする。
しかし、そのコンピュータにはDivX(やXvidその他)がインストールされていなかったとする。
どうしよう。
0944デフォルトの名無しさん
2008/02/14(木) 00:20:05レジストリの HKEY_CLASSES_ROOT\Media Type と SDK のドキュメントの
「カスタム ファイル タイプの登録」を眺めるとひょっとしたら幸せに
なれるかも
# スプリッター/パーサーフィルタが対応してるファイルかどうかは判定できる
# ただし拡張子だけじゃなく、ファイル先頭のビットパターンまで見る必要が
# あるけど
0945デフォルトの名無しさん
2008/02/14(木) 00:26:46はい。
>>943
列挙されたファイルをDirectShowで使用する場合、Renderのタイミングでエラーになりますので、
そのタイミングで該当ファイルをリストから除外します。
ファイルの列挙のタイミングでは、精度よりもパフォーマンスを確保したいのです。
私の理解が不十分ですので、出直してきます。
ありがとうござしました。
0946デフォルトの名無しさん
2008/02/14(木) 00:28:51ヒントありがとうございます。
調べてみます。
0947デフォルトの名無しさん
2008/02/14(木) 17:00:20ffdshowと比べて負荷が高いような気がします。
※色空間は暫定で、一番最初にCheck〜関数へ飛んでくる色空間にしてます。
自作フィルタをGRFで見てみると、AVIDecompressorが出力ピンに付くんですよね・・・そのせいでしょうか?
一応ffdshowのソースを見てみましたが、私には難解すぎました・・・orz
どなた様かご教授よろしくお願いいたします。。
0948デフォルトの名無しさん
2008/02/14(木) 21:46:510949デフォルトの名無しさん
2008/02/14(木) 22:14:09http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/mediatypes.asp
MEDIASUBTYPE_WAVEで出力している自前のソースフィルタがあるけど普通に動いているな〜
どういうことだこれはwww
0950デフォルトの名無しさん
2008/02/14(木) 23:05:06MEDIASUBTYPE_PCM = MEDIASUBTYPE_WAVE
と考えていいのか?(いやまずいだろうとは感じているのだが)
0951デフォルトの名無しさん
2008/02/14(木) 23:10:440952デフォルトの名無しさん
2008/02/14(木) 23:29:43そしたら、サブタイプがWAVEだった場合、
中身のフォーマットはどのようにして取得するの?
0953デフォルトの名無しさん
2008/02/16(土) 21:17:20質問です。
メモリ上のH.264とAACを含んだTSを再生したく、調べてみて、
ハードディスク等に保存されている動画を再生するには
IMediaControl->RenderFileを使用する事が分かったのですが、
自分でHeapAlloc等を使い、
メモリ上に展開した動画データを直接再生する方法が分かりません
何か方法はあるでしょうか?
宜しくお願いしますm(__)m
0954デフォルトの名無しさん
2008/02/16(土) 21:18:570955デフォルトの名無しさん
2008/02/16(土) 21:38:02ソースフィルタ書け。
0956デフォルトの名無しさん
2008/02/16(土) 21:51:410957デフォルトの名無しさん
2008/02/16(土) 22:14:14>>956
分かりました
それらのキーワードでぐぐってみます
レスありがとうございましたm(__)m
0958デフォルトの名無しさん
2008/02/22(金) 14:38:56開発環境はWinXP + VS2005 です。
DirectShowでmp3のデコードを行ってメモリ上にrawデータを展開し、
そのデータをDirectSoundで再生させようと考えているのですが、
なかなか参考になりそうなwebページや書物が見つかりません。
そもそもこのことは可能でしょうか?
もし可能であれば簡単に展開の仕方を教示していただきたいです。
また参考になるHP等ございましたらご提示願います。
0959デフォルトの名無しさん
2008/02/22(金) 15:52:58DirectSoundでWAVEをストリーミングするサンプルを見つける
MP3をWAVEに変換するサンプルを見つける
それら2つのサンプルを組み合わせる
0960デフォルトの名無しさん
2008/02/22(金) 22:00:35yaneSDK3rd で DirectShow 使って PCM に直す処理があったと思うので
気合でソース読め。
DirectSound 使わんで普通に再生フィルタにつなげばそれで良いと思うのだがな。
0961デフォルトの名無しさん
2008/02/25(月) 23:55:58ttp://blog.monogram.sk/janos/tools/monogram-graphstudio/
オープンソース版GraphEditだそうだ。
0962デフォルトの名無しさん
2008/02/28(木) 13:15:03ttp://www.codeproject.com/KB/audio-video/dsgraphedit.aspx
0963デフォルトの名無しさん
2008/02/28(木) 20:37:550964デフォルトの名無しさん
2008/03/02(日) 16:58:32キーフレーム、バッファリングと関係があったりするのでしょうか。
また、再生レートを変更しても動画が一瞬止まらないようにするための解決法などありますか?
0965デフォルトの名無しさん
2008/03/03(月) 03:02:10どうすれば同期しますか?
0966デフォルトの名無しさん
2008/03/04(火) 03:23:05PSDK?
0967デフォルトの名無しさん
2008/03/04(火) 17:36:08最新の6.1(Windows Server 2008/.NET Framework 3.5まで対応)にも収録されている。
0968ddd
2008/03/06(木) 17:31:300969デフォルトの名無しさん
2008/03/06(木) 17:32:55http://pc11.2ch.net/test/read.cgi/tech/1162913156/l50
http://pc11.2ch.net/test/read.cgi/tech/1162913156/l50
http://pc11.2ch.net/test/read.cgi/tech/1162913156/l50
0970デフォルトの名無しさん
2008/03/07(金) 19:09:03「USB Video Class Extension Units」と戦ったかた居ませんか?
ttp://msdn2.microsoft.com/en-us/library/ms803127.aspx
サンプルどおりに.axのDLLを作成して、infで登録し、
デバイスマネージャのドライバリストには入ってるんですけど
実際にAPLから、
pKsTopologyInfo->get_NumNodes(&nNodesNum);
for( int i=0 ; i<nNodesNum ; i++ ){
GUID guid;
hr = pKsTopologyInfo->get_NodeType(i,&guid);
if (!SUCCEEDED(hr)){
printf("err\n");
}
}
ってやると、extension unitのnodeで
KSNODETYPE_DEV_SPECIFICが帰ってくるんですよ。
(他のnodeは正常なGUIDが取れる)
ここではextension unitのGUIDeが帰ってくると
思ってたんですけど。・・・?
0971デフォルトの名無しさん
2008/03/08(土) 09:19:060972デフォルトの名無しさん
2008/03/08(土) 12:51:36IPersistStream::Save()は成功するのですが、IPersistStream::Load()はいつどのフィルタで呼んでも「初期化は既に完了している」とエラーが出てしまいます。
そもそも、設定の保存にIPersistStreamを使うので合っているのでしょうか?
0973デフォルトの名無しさん
2008/03/08(土) 13:20:42http://mimizun.com/search/perl/dattohtml.pl?http://mimizun.com/log/2ch/tech/pc8.2ch.net/tech/dat/1026666092.dat
0974デフォルトの名無しさん
2008/03/10(月) 12:26:29AM_SEEKING_SeekToKeyFrame
最も近いキー フレームをシークする。これは高速だが、精度は落ちる。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/imediaseekingsetpositions.asp
という記載がありますが、AM_SEEKING_SeekToKeyFrameを加えても高速になりません。
これって体感できるほどの効果があるのでしょうか?
0975デフォルトの名無しさん
2008/03/10(月) 22:09:400976デフォルトの名無しさん
2008/03/11(火) 11:27:40UVCのExtension関連の記憶は少しあやふやだけど、KSNODETYPE_DEV_SPECIFICで
良かった気がする。アクセス自体はその後Pinインタフェイスで行ったような。
ただ、UVC周辺は動作が怪しいんだよね…XPでの経験しかないんだけど、Extensionの
サンプルってそのままだと上手く動かなかった気がする。
あとXPだとUVCドライバの対応が中途半端なので、MSDNの説明通りにドライバが動かない
部分もあったり。Vistaだとそこらへん改善してるのかどうか少し気になる。
0977970
2008/03/11(火) 13:03:33HINTありがとう。
Pinインタフェイスですか・・・。試してないので早速試してみます。
KSNODETYPE_DEV_SPECIFICのノードのPinですよね。
あと、VISTAでもやって見ますね。
0978970
2008/03/12(水) 19:58:39VISTAでやったところ、get_NodeTypeはDEV_SPECIFICが返り、
やっぱり、CreateNodeInstanceは失敗したんですが、
IKsControlのKsPropertyでアクセスできました!やった。
ただ、XPは同様な方法ではダメでした。
(MSDNにもFilterではなくnodeからしか出来ないと書いてありますし・・)
で、Pinインタフェイスなのですが、IKsPinの事ですよね!?
インタフェイスは取得できたのですが、どう扱えばよいのか・・。
0979デフォルトの名無しさん
2008/03/13(木) 12:49:04他のアプリがUSB接続のカメラの映像をプレビューしている状態で、
自分のアプリでそのカメラの映像をキャプチャーしたいんですけど、
それって、DirectShowのAPIで実現可能でしょうか?
Geekさんの、ビデオ入力デバイスからの映像をAVIに保存するサンプルコード
http://www.geekpage.jp/programming/directshow/video-capture-save-avi.php
を使用させてもらい、試してみたのですが
pCaptureGraphBuilder2->RenderStream(&PIN_CATEGORY_CAPTURE,
NULL, pDeviceFilter, NULL, pFileOut);
でE_INVALIDARGが返却され、映像を横取りキャプチャーすることはできませんでした。
X-LiteというSIPクライアントソフトはその横取りキャプチャー行為が可能で、
その真似がしたいのですが、どうやっているのかが分かりません…
X-Liteのキャプチャーを開始すると他のアプリのプレビュー映像は消えるので、
カメラに映像配信を停止するような?命令を出しているのかもしれません。
0980デフォルトの名無しさん
2008/03/13(木) 17:38:50どなたかアドバイスください。
IBasicAudio::put_Volume だとOSのWAVE音量が変わってしまうようです。
DirectSoundのSetVolumeのように、OSの設定には影響を与えない
アプリ内でのみ有効な音量の変更は出来ないでしょうか?
(設定できるのはOSの音量設定以下での相対値で構いません)
よろしくお願い致します。
0981980
2008/03/14(金) 10:26:08Winampとかでムービー再生するとアプリ内の音量調整はOSのボリューム
コントロールに影響しないので、何かしら方法はあると思うのですけど。
WinampがDirectShowを使ってるかは分らないですが…。
失礼いたしました。
0982デフォルトの名無しさん
2008/03/14(金) 11:34:26DirectShowでの実現方法は分かりませんが…
WinAPIならコレでできたような…
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpmltimd/html/_win32_waveoutsetvolume.asp
0983980
2008/03/14(金) 12:52:40レスどうもです
>waveOutSetVolume
このAPIでは、WAVEボリュームどころかOSのマスターボリュームまで
変わってしまいました。やりたいのはOSのボリューム設定を動かさずに
DirectShowの音声出力だけを制御する(下げる)ことなんです。
0984デフォルトの名無しさん
2008/03/14(金) 13:14:050985980
2008/03/14(金) 13:39:01ヒントありがとうございます。手持ちのデバイスで試してみました。
OSデフォルト:WAVE変更無し
マザボのオンボードカード:WAVE変更あり
USB音源:WAVE変更無し
となりました。さらにモニカのGetDisplayNameに"DirectSound:"が含まれ
ない場合にWAVEボリューム変更ありという感じでした。
なら"DirectSound:"が含まれるデバイスを選択すれば大丈夫なのですが、
PCによってはこれだと音が出ない場合もあったりで、結構困りモノです。
なんとかユーザーに選択させる方向で考えたいと思います…。
0986デフォルトの名無しさん
2008/03/14(金) 14:24:35そのバッファの音量変えればいいようにも思えるんだが違うのかな?
もともとの音関係のライブラリはデバイスに激しく依存していて
WAVE系APIで複数音を鳴らせることはできないのも多かった。
で、DirectSoundによってアプリごとの設定ができるようになった。
Winampの場合は出力するときに使うDLLに依存してて、
そのDLLが音量を調節する機能を盛っていたはず。
だから、自力で実装するかDirectSound使うか。
列挙についてはWindowsのガイドライン通りにやっても
うまくいかないことは多いので下手に作りこむとはまると思う。
0987デフォルトの名無しさん
2008/03/14(金) 15:39:26フィルタはレジストリに登録しなくても使えるみたいだし。
0988980
2008/03/15(土) 10:41:01>DirectShowの何かがDirectSoundバッファにストリーミングさせてるから
>そのバッファの音量変えればいいようにも思えるんだが違うのかな?
バッファがどこにあるのか(どう取得するのか)自分の知識範囲では
わかんないです。
>>987
その発想はありましたが、サクッと作れるなら苦労しないです^^;
画像だとサンプルグラバってのを参考にして出力画像を加工する
ってのはやったことあるんですが、音だとどこら辺参考にしたら
いいでしょうか?
デコード後の生データの流れにルーチンを割り込ませることが出来れば、
確かにボリューム調整は単なる乗算なので出来そうではありますが、
そこまでたどり着くので難儀してますね…。
0989デフォルトの名無しさん
2008/03/15(土) 11:29:03理解に5分もかからないけどな。
0990デフォルトの名無しさん
2008/03/15(土) 11:34:50追加して掛け算するようにすれば簡単にできると思う。
コールバックを登録するインタフェイスを追加して、掛け算の代わりにコールバックを
呼ぶフィルタにすれば今後映像音声のいろんな加工やモニタリングに流用可能。
レス数が950を超えています。1000を超えると書き込みができなくなります。