英語で読む

次の方法で共有


DirectShow での ASF Web ストリームの再生

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

Microsoft DirectShow では 、WM ASF リーダー フィルターを使用したファイル再生シナリオで Web ストリームがサポートされていますが、ストリームをキャプチャして保持するには、独自の DirectShow フィルターを記述する必要があります。

注意

Windows Media Services を実行しているサーバーからストリーミングされるコンテンツ内の Web ストリームを再生するには、Web ページに埋め込まれた Windows メディア プレーヤー 9 Series ActiveX® コントロールを使用します。

 

WMMEDIATYPE_FileTransfer型のストリームを含むファイルが指定されると、WM ASF リーダーによって出力ピンが作成されます。 フォーマット ブロックは 、WMT_WEBSTREAM_FORMAT 構造になります。 (この構造は、Windows Media Format SDK のドキュメントに記載されています)。そのメディアの種類を処理できるダウンストリーム フィルターが使用できない場合、ピンは接続されていないままになりますが、ファイルは引き続きオーディオストリームまたはビデオストリームを再生します。

Web ストリーム内の各メディア サンプルには 、Windows Media Format SDK ドキュメントに記載されているWMT_WEBSTREAM_SAMPLE_HEADER構造が含まれています。 構造体の長さは、 wszURL メンバーの長さに応じて異なります。 サンプル データへのポインターは最初にこの構造体を指し、ストリーム内の実際のデータにアクセスするには、構造体を越えてポインターを進める必要があります。

Web ストリーム ハンドラー フィルターは 、CBaseRenderer クラスに基づいている必要があります。 CBaseRenderer::D oRenderSample メソッドでは、フィルターは、Web ストリームに関する情報の構造を解析し、適切なアクションを実行する必要があります。 通常、ファイルをディスクに保存し、CreateUrlCacheEntry 関数と CommitUrlCacheEntryW 関数または CommitUrlCacheEntryA 関数を呼び出して、ファイルをインターネット エクスプローラー キャッシュに配置します。 フィルターでは、マルチパート ファイル (つまり、1 つ以上のサンプルのファイル) を処理する必要があります。また、 WMT_WEBSTREAM_SAMPLE_HEADER.wSampleType メンバーによって指定される render コマンドも処理する必要があります。 フィルターは、 EC_OLE_EVENT イベントをアプリケーションに送信し、レンダリングするファイルの名前を含む WMT_WEBSTREAM_SAMPLE_HEADER.wszURL 文字列のテキストと共に送信します。 その後、アプリケーションによってブラウザーに指定されたページが表示されます。 Web ストリームが正しく作成されている場合は、ファイルが既にキャッシュに存在している必要があります。

WMT_WEBSTREAM_FORMATとWMT_WEBSTREAM_SAMPLE_HEADERの詳細については、Windows Media Format SDK のドキュメントを参照してください。

DirectShow での ASF ファイルの読み取り