網路來源功能
網路來源提供串流媒體檔案的基底實作,並公開 IMFMediaSource 介面。 特定網路來源實作取決於用來開啟 RTSP 或 HTTP 等來源的通訊協定。 通訊協定特定的網路來源會擴充基本網路功能。 如需支援設定和通訊協定的相關信息,請參閱 支援的通訊協定。
網路來源:
- 實作快取、Proxy 偵測和自動重新連線等功能。
- 將與通訊協議無關的呼叫從來源解析程式轉換為通訊協定特定的呼叫。
- 與套接字層和作系統互動。 剖析 SDP 描述,並將其當做組態數據使用,並從基礎套接字層讀取數據流數據。 接收時,網路來源會負責重新排序和要求重新傳輸封包。
網路來源建立
從網路建立來源的媒體來源,與本機檔案的媒體來源不同。 應用程式會將來源的 URL 傳遞至 Source Resolver 方法,例如 IMFSourceResolver::CreateObjectFromURL 或 IMFSourceResolver::BeginCreateObjectFromURL 並指定MF_RESOLUTION_MEDIASOURCE旗標。 如需使用此旗標的詳細資訊,請參閱使用來源解析程式 。
根據應用程式所提供的配置,來源解析程式會載入適當的配置處理程序物件,這會公開IMFSchemeHandler介面。 應用程式也可以透過呼叫IMFSchemeHandler::BeginCreateObject ,直接使用配置處理程式來建立網路來源。
如需詳細資訊,請參閱 Scheme Handlers 和 Byte-Stream Handlers。
媒體基礎不支援網路來源的位元組數據流。 只有下載的內容案例才支援位元組數據流物件。 所有數據都會儘快傳輸,以便儲存為本機計算機上的檔案。 網頁伺服器提供下載的數據。 下載開始之後,用戶端不會與伺服器進行通訊。 在此情況下,會使用 HTTP 下載通訊協定。
如果應用程式要求來源解析程式建立 “HTTP:”、“mms:” 或 “rtsp:” 配置的位元組數據流物件,則呼叫會失敗,並出現MF_E_UNSUPPORTED_SCHEME錯誤。
注意
在 Windows 7 中,網路來源支援 Windows Media Station 檔案 (。NSC)。 這些檔案會用於透過網路進行媒體內容的多播串流。 若要為指定的 建立網路來源。NSC 檔案,應用程式必須使用來源解析程式。
如果應用程式使用配置處理程式,則異步呼叫會忽略 dwFlags 參數,並在完成時傳回網路來源的指標。
下圖顯示使用網路來源進行媒體串流的數據流。
網路來源組態
本主題描述網路來源和相關聯組態選項所支援的功能。 應用程式可以在建立網路來源物件時設定網路來源。 這些選項會儲存在 IPropertyStore 物件中,應用程式必須傳入來源解析程式方法的 pProps 參數,或 IMFSchemeHandler::BeginCreateObject。
自動重新連線
網路來源的自動重新連線功能可讓用戶端在與伺服器的 TCP 連線失敗或客戶端無法接收封包時自動重新連線到媒體伺服器。 線上失敗時,網路來源會嘗試使用上一個連線中使用的相同組態重新連線到媒體伺服器。 重新連線程式是異步的。 當重新連線成功或失敗時,網路來源會引發 MEReconnectStart 事件,並在重新連線成功或失敗時引發 MEReconnectEnd 事件。
如果重新連線嘗試次數超過 MFNETSOURCE_AUTORECONNECTLIMIT 屬性所指定的最大值,則會取消重新連線作業。 重新連線嘗試的數目會儲存在 MFNETSOURCE_AUTORECONNECTPROGRESS 屬性中。
自動重新連線即使在媒體伺服器的 TCP 連線失敗時,也能順暢播放媒體內容。 為了順利播放體驗,客戶端必須有足夠的數據,至少 1 到 2 分鐘,在其快取中繼續播放,直到重新連線為止。 網路來源可以在 MFNETSOURCE_MAXBUFFERTIMEMS 屬性中設定的最大數據量。
快速串流
網路來源用戶端會要求伺服器以比內容比特率所指定的速率更快的速度串流部分數據。 如果伺服器上已啟用 快速啟動,伺服器會傳送加速的比特率數據流,讓用戶端可以比即時快緩衝足夠的數據量。 這可藉由將初始緩衝延遲降到最低來改善用戶體驗,原因可能是用戶端電腦或網路速度低以及可用頻寬等各種因素所造成。
若要指定用戶端可以要求的快速串流數據量,請設定 MFNETSOURCE_ACCELERATEDSTREAMINGDURATION 屬性。 如果網路來源使用 UDP 作為傳輸通訊協定,請改為設定 MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION 屬性來指定快速串流數據的最大數量。
用戶端上的快速串流也可以透過 快速快取 功能進行串流—串流隨選內容的速度比即時快取快,以及快取用戶端本機快取上的數據。 若要使用這種類型的快速串流,必須在網路來源上啟用快速快取,而且伺服器必須支援它。 當用戶端向伺服器要求內容時,網路來源會先檢查內容是否已經在用戶端的快取中。 如果內容位於用戶端的本機快取中,且尚未過期,則會轉譯它。 如果內容不在本機快取中或已經過期,則會串流處理和快取內容,而網路來源會從本機快取播放內容。 在後續的要求中,針對播放清單,只會快取遺漏的項目,然後播放。 如果播放清單項目已經在用戶端的本機快取中,則會從該處播放,而不會再次快取。
根據預設,快取會在網路來源用戶端上啟用。 不過,下列因素也會判斷是否使用此功能:
- 客戶端必須有額外的頻寬,才能下載和快取內容的速度比一般速度快。
- 用戶端必須有足夠的磁碟空間。 如果用戶端在快取要求的隨選內容之後,其可用磁碟空間少於 100 MB,則不會快取,但會同時進行串流和轉譯。
快速快取功能是由 MFNETSOURCE_CACHEENABLED 屬性所控制。
緩衝區管理
網路來源提供有效率的緩衝區管理,可監視用戶端上的緩衝區狀態。 根據預設,網路來源會在啟動時緩衝 5 秒的數據。 您可以藉由設定 MFNETSOURCE_BUFFERINGTIME 屬性來設定此值。 根據這個屬性值,網路來源會計算足以確保媒體內容順暢且不間斷播放的緩衝區大小。 如果此屬性設定為 0,則會停用緩衝區管理。 當緩衝區中的內容量很低時,網路來源會開始緩衝處理,並引發 MEBufferingStarted 事件,以指出緩衝已經開始。 收到此事件時,管線會停止轉譯。 緩衝完成時,網路來源會引發 MEBufferingStopped 事件,而且用戶端可以再次開始轉譯。
用戶端會在內容累積第一個範例的緩衝區大小所指出的數據量之後,開始轉譯內容。 如果此值低於計算的緩衝區大小,則播放會立即啟動。 此行為與快速啟動功能非常類似。
MFNETSOURCE_MAXBUFFERTIMEMS 屬性會儲存可以緩衝處理的數據量上限。
帶寬選取
當用戶端連線到媒體伺服器時,網路來源會在連線設定期間執行 靜態封包組 測量,以估計用戶端與伺服器之間的初始連結頻寬。 根據此測量的結果,用戶端可以選取符合估計頻寬的音訊和視訊串流。 這可確保串流媒體內容的順暢播放。
在快速啟動階段,會執行動態封包配對 測量。 在此程式中,用戶端會收到大量數據,這可以是多個封包或範例。
動態封包組測量的結果比靜態封包配對測量所傳回的連結頻寬估計更精確,因為靜態封包配對程式會傳送固定大小的單一封包,這可能無法為高頻寬網路產生精確的結果。
應用程式可以使用 MFNETSOURCE_PPBANDWIDTH 屬性來取得估計頻寬。
網路狀況可能會動態變更,導致網路來源播放時發生問題。 網路來源可以根據接收速率和緩衝區狀態來變更用戶端的初始數據流選取專案。 例如,用戶端可能會在網路壅塞期間切換到較低的比特率,並在網路流量改善且客戶端累積足夠的緩衝內容時切換回較高的比特率。
相關主題
-
媒體基礎 網路