建立 ASF 文件接收器
ASF 檔案接收器是由 Media Foundation 提供的 IMFMediaSink 實作,應用程式可用來將 ASF 媒體數據封存至檔案。 如需了解有關 ASF 媒體匯集的物件模型和一般用法的信息,請參閱 ASF 媒體匯集。
建立 ASF 文件接收器實例有兩種方式。 您可以呼叫 MFCreateASFMediaSink 或 MFCreateASFMediaSinkActivate。
如果您呼叫 MFCreateASFMediaSink,則必須指定一個位元組流作為輸出檔案,讓媒體接收端在編碼過程中寫入 ASF 內容。 指定的位元組數據流必須具有可搜尋和可寫入的功能,否則 MFCreateASFMediaSink 呼叫會失敗,並出現E_FAIL錯誤碼。 此呼叫會建立進程內檔案接收物件,並傳回檔案接收 IMFMediaSink 介面的指標。
如果您呼叫 MFCreateASFMediaSinkActivate,則必須指定檔案接收將寫入媒體數據的輸出檔 URL。 在此情況下,檔案接收器會在內部建立位元組串流。 函式會傳回指向檔案匯入的 IMFActivate 介面的指標。 至
當您的編碼拓撲設計如下時,請考慮 MFCreateASFMediaSinkActivate,而不是 MFCreateASFMediaSink:
編碼拓撲適用於受保護的媒體路徑 (PMP),而檔案接收器則用於進程外。
拓撲的輸出節點是使用傳回的檔案接收器啟動物件指標所建立,您的應用程式則透過串流編號來追蹤檔案接收器中的串流。
注意
您可以透過呼叫 IMFActivate::ActivateObject來啟動檔案接收器。 不過,您不需要特意啟用物件。 媒體會話會追蹤啟動物件,並在編碼會話期間自動啟動檔案匯出。
數據流資訊是在 ContentInfo 物件中設定。 在下一個子區段中討論。
建立 ASF 檔案接收器之後,必須先進行設定,然後才能建置拓撲。 檔案接收必須知道下列資訊,才能產生輸出檔案。
- 基本串流資訊
- 編碼模式資訊
- 元數據
檔案接收會實作 ASF ContentInfo 物件,並公開 IMFASFContentInfo 介面,讓應用程式可以使用它來設定與數據流和編碼相關的資訊。 根據您所呼叫的用來建立檔案接收端的函式,有兩種方式可取得 IMFASFContentInfo 介面的參考。
- 如果您呼叫 MFCreateASFMediaSink 函式,應用程式必須在返回的文件接收器上呼叫 IMFMediaSink::QueryInterface,以查詢 IMFASFContentInfo 介面。
- 如果您選擇呼叫 MFCreateASFMediaSinkActivate,此函式會預期您在呼叫之前擁有完整設定的 ContentInfo 物件。 若要這樣做,您必須呼叫 MFCreateASFContentInfo 來建立空的 ContentInfo 對象,然後使用所有必要的資訊進行設定。 將已配置的 ContentInfo 物件傳遞至 MFCreateASFMediaSinkActivate,以取得匯聚啟用物件的指標。 您無法使用傳回的啟用對象來啟動檔案接收,然後變更任何數據流或編碼資訊。
如需了解關於設定接收數據流和特定屬性的資訊,請參閱下列主題:
相關主題