設定 ASF 分隔器物件

ASF 分割器 物件是 WMContainer 層物件,會剖析進階系統格式的 ASF 資料物件 (ASF) 檔案。 建立分割器並初始化以剖析媒體檔案的 ASF 資料物件之後,分割器必須設定為產生特定資料流程的樣本。 呼叫 IMFASFSplitter::SelectStreams 以選取所需的資料流程。

或者,應用程式也可以將其設定為以反向順序產生樣本,或產生受保護內容的範例。 若要設定這些選項,請呼叫 IMFASFSplitter::SetFlags ,並傳遞支援旗標的必要位組合。 在呼叫此方法之前,用戶端必須順利完成 IMFASFSplitter::Initialize 呼叫;否則, SetFlags 會失敗,並 出現MF_E_NOT_INITIALIZED 錯誤碼。 如需初始化分隔器的相關資訊,請參閱 建立 ASF 分割器物件

若要檢查此旗標目前是否在分隔器上設定,請呼叫 IMFASFSplitter::GetFlags

選取用於剖析的資料流程

透過 IMFASFSplitter::Initialize 呼叫進行初始化程式期間,分割器會偵測 ASF 檔案中的資料流程和資料流程識別碼數目。 根據預設,分隔器不會選取任何資料流程。 應用程式必須藉由呼叫 IMFASFSplitter::SelectStreams來選取資料流程。 這個方法會採用資料流程編號的陣列。 若要取得資料流程的資料流程號碼,請在 ASF 設定檔上呼叫 IMFASFProfile::GetStream ,或在資料流程描述元上呼叫 IMFStreamDescriptor::GetStreamIdentifier 。 (您可以從 ContentInfo 物件取得 ASF 設定檔和資料流程描述項。) 如果用戶端通過分割器無法辨識的資料流程編號,就會失敗並出現 MF_E_INVALIDSTREAMNUMBER 錯誤。

呼叫 SelectStreams 會清除先前的選取專案。 未選取陣列中未指定的任何資料流程。 若要取得目前選取的資料流程清單,請呼叫 IMFASFSplitter::GetSelectedStreams。 這個方法會採用陣列的指標,此方法會填入資料流程編號。 如果陣列大小小於選取的資料流程數目,方法會失敗並出現 MF_E_BUFFERTOOSMALL 錯誤。 在此情況下,方法會傳回 pwNumStreams 參數中選取的資料流程數目。 然後,您可以使用這個數位來配置正確大小的陣列,並再次呼叫 方法。

如需範例程式碼,請參閱教學 課程:讀取 ASF 檔案中的。

反向播放設定

在分割器的初始化程式期間,它會判斷 ASF 內容是否支援反向播放。 如果這樣做,則可以設定分割器,藉由設定 MFASF_SPLITTER_REVERSE 旗標,以反向順序產生樣本。 如果內容不支援反向播放, IMFASFSplitter::SetFlags傳回MF_E_INVALIDREQUEST,但旗標是在分隔器上設定。

如果分割器設定為以反向方向剖析,則分隔器一律會在包含 ASF 資料物件的緩衝區結尾開始剖析。 因此,若要反向剖析資料位移,以及要剖析的資料長度,必須適當地設定。 如需設定正確值的資訊,請參閱 從現有的 ASF 資料物件產生資料流程範例

受保護的內容設定

分割器可以透過IMFASFSplitter::SetFlags來設定MFASF_SPLITTER_WMDRM,以使用封包層級加密內容。 這會指示分隔器提供受 Windows Media Digital Rights Management 保護的內容範例, (DRM) 。 設定此旗標時,分割器所產生的範例會包含解密媒體資料及重新建構框架所需的資訊,例如 MFSampleExtension_PacketCrossOffsets 屬性。 此屬性是包含 DWORD陣列的 Blob。 每個 DWORD 都會提供框架相對於框架開頭的承載界限。 如果此屬性不存在,框架會包含在單一承載中。 一般而言,分割器所產生的範例包含多個媒體緩衝區,應用程式可以呼叫 IMFSample::ConvertToContiguousBuffer,將所有緩衝區複製到一個連續緩衝區。 產生的緩衝區包含框架,而屬性值包含此緩衝區的位移。

ASF 分隔器