共用方式為


從網路來源播放檔案

[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器和接收寫入器已取代它。 來源讀取器和接收寫入器已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用來源讀取器和接收寫入器,而不是Windows Media Format 11 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

從網路讀取與讀取本機檔案基本上不同。 應用程式會將 URL 傳遞給讀取器物件的 IWMReader::Open 方法,而讀取器物件會處理網路通訊協定的詳細資料。 讀取器物件會使用智慧型緩衝區管理,盡可能提供最順暢的播放。 如果應用程式需要更充分控制讀取器物件的網路設定,這些設定可透過 IWMReaderNetworkConfigIWMReaderNetworkConfig2 介面取得。

來自網路來源的內容分為下列兩種類別之一:

  • 流。 資料會即時傳輸,以在本機電腦上播放。 執行 Windows 媒體服務的伺服器可以提供串流資料。 如果串流處理多個位元速率 (MBR) 內容,則用戶端可以在串流進行時向伺服器要求不同的位元速率。
  • 下載。 所有資料都會儘快傳輸,以便儲存為本機電腦上的檔案。 網頁伺服器提供下載的資料。 下載開始之後,用戶端不會與伺服器進行通訊。

當讀取器物件從網頁伺服器下載檔案時,它會使用稱為漸進式串流的技術,讓玩家在下載完成之前開始轉譯內容。 資料會經過緩衝處理,以提供不中斷的資料流程給播放程式。 內容傳輸速率和持續時間等資訊可用來判斷在提供給播放程式之前緩衝資料的時間長度。

若要透過網路開啟檔案或資料流程,請使用適當的 URL 呼叫讀取器物件的 IWMReader::Open 方法。 Open 是非同步呼叫,因此會立即傳回。 當來源準備好讀取時,讀取器物件會將WMT_OPENED通知傳送至應用程式的 IWMStatusCallback::OnStatus 回呼 方法。 此時,應用程式可以藉由呼叫 IWMReaderAdvanced2::GetPlayMode來查詢讀取器以取得傳遞模式。 對於網路內容,這個方法會傳回WMT_PLAY_MODE_DOWNLOAD,指出下載的內容,或WMT_PLAY_MODE_STREAMING,表示串流內容。

若要開始讀取檔案或資料流程,請呼叫 IWMReader::Start 方法。 讀取器會在開始緩衝內容時傳送WMT_BUFFERING_START通知,並在緩衝完成時傳送WMT_BUFFERING_STOP通知。 當讀取器正在緩衝處理內容 (也就是說,這兩個通知) 之間,您可能會想要向使用者顯示緩衝進度。 IWMReaderAdvanced2::GetBufferProgress方法會傳回已緩衝的資料百分比,以及剩餘的估計時間。 針對下載的內容,您也可以呼叫 IWMReaderAdvanced2::GetDownloadProgress 以取得下載進度。 重複呼叫這些方法以更新顯示,直到緩衝完成為止。 由於網路壅塞之類的因素,在播放期間可能會再次發生緩衝。 如果發生這種情況,應用程式會收到另一個WMT_BUFFERING_START通知。

當讀取器物件開始播放內容時,它會傳送WMT_STARTED通知。 當每個範例解碼並變成可供轉譯時,讀取器會透過 IWMReaderCallback::OnSample 回呼 方法將它傳遞給應用程式。 此時,進程與本機檔案播放相同。 播放停止時,讀取器會傳送WMT_END_OF_STREAMING通知。

讀取 ASF 檔案