共用方式為


設定 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 屬性。 此屬性是一個 Blob,其中包含 DWORD的數位。 每個 DWORD 都會給予框架相對於起始處的負載邊界。 如果這個屬性不存在,框架就會包含在單一承載中。 一般而言,分割器所產生的樣本包含多個媒體緩衝區,應用程式可以藉由呼叫IMFSample::ConvertToContiguousBuffer ,將所有緩衝區複製到一個連續緩衝區。 產生的緩衝區包含框架,而屬性值包含此緩衝區的位移。

ASF 分隔器