私はアプリケーションでオーディオ/ビデオファイルを再生するためにDirectShowを使用しています。私はIGraphBuilder::RenderFile()を使用してフィルタグラフを作成し、IMediaControlインターフェイスを使用してメディアの再生/一時停止/停止を行います。これはローカルのメディアファイルでは問題なく動作しますが、ライブmmsストリームで問題が発生します。DirectShowはライブストリームを停止/再開します
ライブストリームのIMediaControl::Stop()に電話すると、ストリームの再生が予期したとおりに停止します。しかし、私がIMediaControl::Run()を呼び出してストリームを再開すると、何も起こりません。グラフはEC_COMPLETEイベントを生成しますが、ビデオはもう再生されません。
IMediaControl::Pause()に続いてIMediaControl::Run()をコールすると、中断したストリームが再開しますが、最終的には停止します。ライブストリームと再同期するのではなく、IMediaControl::Pause()が呼び出されたときにバッファに入っていたデータを再生しているようです。
フィルタグラフを破棄して再構築することなく、ライブストリームの再生を再開する方法を知っている人はいますか?
グラフにどのフィルタが追加されているのか知っていますか? – heavyd
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
:: Stop()の代わりにIMediaControl :: Pause()を試しましたか?これは、ソースまたはいずれかのフィルタの実装に応じて動作する場合と動作しない場合があり、ストリームのプロパティによっても異なります。 – Rom