網路來源功能
網路來源提供串流媒體檔案的基底實作,並公開 IMFMediaSource 介面。 特定網路來源實作取決於用來開啟 RTSP 或 HTTP 等來源的通訊協定。 通訊協定特定的網路來源會擴充基本網路功能。 如需支援配置和通訊協定的相關資訊,請參閱 支援的通訊協定。
網路來源:
- 實作快取、Proxy 偵測和自動重新連線等功能。
- 將與通訊協定無關的呼叫從來源解析程式轉換為通訊協定特定的呼叫。
- 與通訊端層和作業系統互動。 剖析 SDP 描述,並將其當做設定資料使用,並從基礎通訊端層讀取資料流程資料。 接收時,網路來源會負責重新排序和要求重新傳輸封包。
網路來源建立
從網路建立來源的媒體來源與本機檔案的媒體來源不同。 應用程式會將來源的 URL 傳遞至 來源解析程式 方法,例如 IMFSourceResolver::CreateObjectFromURL 或 IMFSourceResolver::BeginCreateObjectFromURL ,並指定MF_RESOLUTION_MEDIASOURCE旗標。 如需使用此旗標的詳細資訊,請參閱 使用來源解析程式。
根據應用程式所提供的配置,來源解析程式會載入適當的配置處理常式物件,這會公開 IMFSchemeHandler 介面。 應用程式也可以直接使用配置處理常式,藉由呼叫 IMFSchemeHandler::BeginCreateObject來建立網路來源。
如需詳細資訊,請參閱 配置處理常式和Byte-Stream處理常式。
媒體基礎不支援網路來源的位元組資料流程。 只有下載的內容案例中才支援位元組資料流程物件。 所有資料都會儘快傳輸,以便儲存為本機電腦上的檔案。 網頁伺服器提供下載的資料。 下載開始之後,不會從用戶端與伺服器進行通訊。 在此情況下,會使用 HTTP 下載通訊協定。
如果應用程式要求來源解析程式為 「HTTP:」、「mms:」 或 「rtsp:」 配置建立位元組資料流程物件,則呼叫會失敗,併發生MF_E_UNSUPPORTED_SCHEME錯誤。
注意
在 Windows 7 中,網路來源支援 windows 媒體站檔案 (。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 屬性來取得預估頻寬。
網路狀況可能會動態變更,導致網路來源播放時發生問題。 網路來源可以根據接收速率和緩衝區狀態來變更用戶端的初始資料流程選取範圍。 例如,用戶端可能會在網路壅塞期間切換到較低的位元速率,並在網路流量改善且用戶端累積足夠的緩衝內容時切換回較高的位元速率。
相關主題