2009-06-26 11 views
1

私はアプリケーションでオーディオ/ビデオファイルを再生するためにDirectShowを使用しています。私はIGraphBuilder::RenderFile()を使用してフィルタグラフを作成し、IMediaControlインターフェイスを使用してメディアの再生/一時停止/停止を行います。これはローカルのメディアファイルでは問題なく動作しますが、ライブmmsストリームで問題が発生します。DirectShowはライブストリームを停止/再開します

ライブストリームのIMediaControl::Stop()に電話すると、ストリームの再生が予期したとおりに停止します。しかし、私がIMediaControl::Run()を呼び出してストリームを再開すると、何も起こりません。グラフはEC_COMPLETEイベントを生成しますが、ビデオはもう再生されません。

IMediaControl::Pause()に続いてIMediaControl::Run()をコールすると、中断したストリームが再開しますが、最終的には停止します。ライブストリームと再同期するのではなく、IMediaControl::Pause()が呼び出されたときにバッファに入っていたデータを再生しているようです。

フィルタグラフを破棄して再構築することなく、ライブストリームの再生を再開する方法を知っている人はいますか?

+0

グラフにどのフィルタが追加されているのか知っていますか? – heavyd

+0

GraphEditは、オーディオ用の "ASF ACM Handler" + "WMAudio Decoder DMO"フィルタと、ビデオ用の "ASF ICM Handler" + "WMVideo Decoder DMO"フィルタを表示します。私は、GraphEditの "Render URL"オプションを使用してストリームを停止して再開するのと同じ問題を抱えています。スカイニュースのライブフィードを使用してテストしています(mms://live1.wm.skynews.servecast.net/skynews_wmlz_live300k) – flashk

+0

:: Stop()の代わりにIMediaControl :: Pause()を試しましたか?これは、ソースまたはいずれかのフィルタの実装に応じて動作する場合と動作しない場合があり、ストリームのプロパティによっても異なります。 – Rom

答えて

2

この現象は、グラフのフィルタの1つにバグがあることを示しています。フィードを再実行できるようにするには、フィルターを交換する必要があります。また、プロトコルとして時代遅れになっているmms://ストリームをレンダリングするための良いソースフィルタもありません。 Windows 7のWindows Media Playerは、アプリケーションで使用できない専用のDirectShowフィルタを使用しています。 Windows Media Format SDKに基づいたカスタムソースフィルタを使用したり、サードパーティの代替製品を使用したりする可能性があります。

更新:Windows XPでは、mms:// URLはWindows Media Splitterフィルタ(wmpasf.dll)で再割り当てされます。明らかに問題のバグの原因です。したがって、まだ使用する予定の場合は、ストリーミングを再開するために、フィルタの新しいインスタンスを削除して再追加し、ピンを再レンダリングする必要があります。私が言及したように、このフィルタは、より最近のバージョンのWindows(少なくともWindows 7)では使用できなくなりました。

2
  1. なぜStop()を呼び出していますか?
  2. MMSのDirectShowフィルタは、MMSに問題があることが知られています。まず、最新のMMS 9(Win 2003に付属)プロトコルをサポートしていません。 MMSの適切なサポートが必要な場合は、Media PlayerコントロールまたはFormat SDKを使用する必要があります。
+0

1)私はこれを試しましたが、期待どおりに動作しません。私はこれを説明するために私の質問を編集しました。 2)他のすべてのメディアタイプで問題なく動作するので、DirectShowを使い続けることをお勧めします。私はあなたが言った他のSDKを見てみましょう。ありがとう。 – flashk

関連する問題