從 ASF 標頭物件取得資訊

ASF 標頭資訊會儲存在媒體檔案的 ASF 標頭物件中。 媒體基礎提供 ASF ContentInfo 物件 來處理 Header 物件。 需要填入的 ContentInfo 物件,應用程式才能讀取現有檔案的標頭資訊。 這是藉由呼叫 IMFASFContentInfo::P arseHeader來達成。 如果剖析順利完成,Media Foundation 會在內部維護的檔案 ASF 程式庫填入來自各種標頭物件的標頭資訊。 其中有些屬性會公開給應用程式,它可以透過簡報描述元、資料流程描述元、設定檔和中繼資料屬性上的屬性來擷取。

如需屬性的完整清單,請參閱 ASF 標頭物件的媒體基礎屬性

從簡報描述元擷取標頭資訊

簡報描述項物件包含特定媒體來源的描述,在此案例中為 ASF 媒體來源。 如果 ParseHeader 呼叫成功完成,則標頭物件的檔案層級資訊會儲存為簡報描述元上的屬性。 若要建立簡報描述元,請呼叫 IMFASFContentInfo::GeneratePresentationDescriptor。 這個方法會傳回已填入之簡報描述元物件的指標,其中包含與 ContentInfo 物件相關聯之 ASF 檔案的這些屬性。 若要取得特定屬性的值,請在簡報描述元上呼叫 IMFAttributes::Getxxx 方法,並指定 MF_PD_ASF_xxx 屬性。

下列範例程式碼會擷取 ContentInfo 物件所指定的 ASF 檔案播放持續時間。

HRESULT GetPlayDuration(
    IMFASFContentInfo *pContentInfo,  // An initialized ContentInfo object. 
    UINT64 *pcbPlayDuration           // Receives the play duration.
    )
{
    IMFPresentationDescriptor* pPD = NULL;

    HRESULT hr = pContentInfo->GeneratePresentationDescriptor(&pPD);
    if (SUCCEEDED(hr))
    {
        hr = pPD->GetUINT64(MF_PD_ASF_FILEPROPERTIES_PLAY_DURATION, pcbPlayDuration);
        pPD->Release();
    }
    return hr;
}

如需一般簡報描述元的詳細資訊,請參閱 簡報描述元

如需完整的簡報描述元屬性集,請參閱 簡報描述元屬性

從資料流程描述項擷取標頭資訊

資料流程描述項物件會公開 IMFStreamDescriptor 介面,並描述檔案中資料流程的特性。 ASF 內容的簡報描述項包含一或多個資料流程描述元,代表 Header 物件中列出的資料流程。 在 成功呼叫 IMFASFContentInfo::GeneratePresentationDescriptor 之後,基礎資料流程描述元會填入來自各種標頭物件的資料流程層級資訊。 若要取得 ASF 資料流程的資料流程描述項,請在從 ContentInfo 物件產生的簡報描述元上呼叫 IMFPresentationDescriptor::GetStreamDescriptorByIndex

某些資料流程屬性會設定為數據流描述元上的屬性。 在資料流程描述項上呼叫 IMFAttributes::Getxxx 方法,並指定 MF_SD_ASF_xxx 屬性。

如需一組完整的資料流程描述元屬性,請參閱資料流程描述元屬性中列出的「ASF 特定 資料流程描述元」屬性

從設定檔物件擷取標頭資訊

除了資料流程描述項之外,ASF 設定檔物件也會描述資料流程屬性。 若要取得現有 ASF 檔案的設定檔,請呼叫 IMFASFContentInfo::GetProfile。 這個方法所傳回的 ASF 設定檔物件不包含任何 MF_PD_ASF_xxx 屬性。 只有在應用程式呼叫 MFCreateASFProfileFromPresentationDescriptor 以從簡報描述項產生設定檔物件之後,才可供應用程式使用。 您可以使用設定檔來取得相互排除和資料流程優先順序物件的指標。

如需設定檔物件的相關資訊,請參閱 ASF 設定檔

從標頭物件擷取中繼資料

ASF 檔案可以包含數個在檔案編碼期間設定的中繼資料屬性。 應用程式可以使用 ContentInfo 物件列舉這些屬性。 其中一些屬性,例如變數位元速率 (VBR) 資訊,可透過簡報描述元、資料流程描述元和媒體類型的屬性提供給應用程式使用。 透過 ParseHeader 呼叫初始化期間,這些屬性會在 ContentInfo 物件上設定。

ASF ContentInfo 物件