DirectShow 中的 ASF Web 串流播放
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
Microsoft DirectShow 可透過 WM ASF 讀取器 篩選,在檔案播放案例中支援 Web 串流,但您必須撰寫自己的 DirectShow 篩選器來擷取和保存數據流。
注意
若要播放正在從執行 Windows 媒體服務之伺服器串流的內容中的網頁串流,請使用內嵌在網頁中的 Windows Media Player 9 系列 ActiveX® 控件。
當指定包含類型為 WMMEDIATYPE_FileTransfer 的檔案時,WM ASF 讀取器會為其建立輸出釘選。 格式區塊將是 WMT_WEBSTREAM_FORMAT 結構。 (此結構記載於 Windows 媒體格式 SDK 檔案。如果沒有可處理該媒體類型的下游篩選,則針腳會保持未連接,但檔案仍會播放音訊和/或視訊串流。
Web 數據流中的每個媒體範例都包含一個 WMT_WEBSTREAM_SAMPLE_HEADER 結構,其記載於 Windows 媒體格式 SDK 檔案中。 結構具有可變長度,視其 wszURL 成員的長度而定。 範例數據的指標一開始指向這個結構,您必須將指標前進到 結構之後,才能存取數據流中的實際數據。
您的 Web 串流處理程式篩選應以 CBaseRenderer類別為基礎。 在 CBaseRenderer::D oRenderSample 方法中,篩選必須剖析結構以取得 Web 數據流的相關信息,然後執行適當的動作。 一般而言,這牽涉到將檔案儲存到磁碟,然後呼叫 CreateUrlCacheEntry 和 CommitUrlCacheEntryW 或 CommitUrlCacheEntryA 函式,將檔案放入 Internet Explorer 快取中。 篩選條件必須處理多部分檔案,也就是大於一個範例的檔案,也必須處理由 WMT_WEBSTREAM_SAMPLE_HEADER.wSampleType 成員指定的轉譯命令。 篩選條件會將 EC_OLE_EVENT 事件傳送至應用程式,以及包含要轉譯之檔名的 WMT_WEBSTREAM_SAMPLE_HEADER.wszURL 字串。 然後,應用程式會讓瀏覽器顯示指定的頁面。 如果 Web 數據流已正確撰寫,則檔案應該已經在快取中。
如需WMT_WEBSTREAM_FORMAT和WMT_WEBSTREAM_SAMPLE_HEADER的詳細資訊,請參閱 Windows 媒體格式 SDK 檔。
相關主題
-
在 DirectShow 中讀取 ASF 檔案