共用方式為


從 ASF 標頭物件取得資訊

ASF 標頭資訊會儲存在媒體檔案的 ASF 標頭物件中。 Media Foundation 提供 ASF ContentInfo 物件 來處理 Header 物件。 已填入的 ContentInfo 物件是必要的,應用程式才能讀取現有檔案的標頭資訊。 透過呼叫 IMFASFContentInfo::ParseHeader來達成此目的。 如果剖析順利完成,Media Foundation 會將內部維護的 ASF 檔案庫填充各種標頭物件的標頭資訊。 其中一些屬性會公開給應用程式,它可以透過簡報描述元、數據流描述元、配置檔和元數據屬性上的屬性來擷取。

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

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

簡報描述元物件包含特定媒體來源的描述,在此案例中為 ASF 媒體來源。 如果 ParseHeader 呼叫成功完成,則 Header 對象的檔案層級資訊會儲存為簡報描述元上的屬性。 若要建立簡報描述元,請呼叫 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-Specific 數據流描述元」屬性。

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

除了數據流描述元之外,ASF 配置檔物件也會描述數據流屬性。 若要取得現有 ASF 檔案的設定檔,請呼叫 IMFASFContentInfo::GetProfile。 這個方法傳回的 ASF 配置檔物件不包含任何 MF_PD_ASF_xxx 屬性。 只有當應用程式呼叫 MFCreateASFProfileFromPresentationDescriptor 從呈現描述符生成配置檔對象之後,這些屬性才可用。 您可以使用設定檔來取得相互排除和串流優先順序物件的指標。

如需設定檔物件的相關信息,請參閱 ASF 設定檔

從標頭物件擷取元數據

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

ASF ContentInfo 物件