建立 ASF 設定檔

本主題描述如何在 Microsoft Media Foundation 中建立 ASF 設定檔。

建立新的設定檔

若要建立空的 ASF 設定檔,請呼叫 MFCreateASFProfile 函 式。 此函式會傳回 IMFASFProfile 介面的指標。 應用程式可以使用這個介面將資料流程新增至設定檔,以及設定每個資料流程。 如需詳細資訊,請參閱 建立和設定 ASF 資料流程

或者,應用程式可以將互斥物件新增至兩個或多個資料流程。 請參閱 使用 ASF 資料流程的互斥

從 ASF ContentInfo 物件取得設定檔

應用程式可以從 ASF ContentInfo 物件取得現有 ASF 檔案的 ASF 設定檔。 設定檔已設定,並包含檔案中所有資料流程的設定。

剖析檔案的 ASF 標頭物件,以初始化 ContentInfo 物件。 這是透過 IMFASFContentInfo::P arseHeader 方法來完成。 讀取所有標頭物件並填入 ASF 程式庫之後,就會產生此檔案的設定檔。 應用程式可以藉由呼叫 IMFASFContentInfo::GetProfile來取得這個初始化設定檔的指標。

從簡報描述項取得設定檔

您可以從檔案的 簡報描述元 ,或從 ASF ContentInfo 物件取得現有 ASF 檔案的設定檔物件。 在此情況下,設定檔已設定,並包含檔案中所有資料流程的設定。 如果您想要修改現有的 ASF 設定檔,這非常有用。 例如,您可能想要以較低的位元速率重新編碼 Windows Media Video 檔案。

若要從簡報描述元取得設定檔,請呼叫 MFCreateASFProfileFromPresentationDescriptor。 此函式會剖析簡報描述元,並使用媒體檔案的相關資訊填入 ASF 設定檔。 函式會傳回 IMFASFProfile 介面的指標。 然後,您可以使用這個介面來修改設定檔。

若要取得簡報描述元,請呼叫下列其中一種方法:

下列範例示範如何從簡報描述項建立設定檔。 函式會建立檔案的媒體來源、從媒體來源取得簡報描述元,以及建立設定檔。 此範例假設 pszFileName 指定 ASF 檔案的 URL。

HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
    *ppProfile = NULL;

    IMFSourceResolver* pResolver = NULL;
    IUnknown* pSourceUnk = NULL;
    IMFMediaSource* pSource = NULL;
    IMFPresentationDescriptor* pPD = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pResolver);

    // Use the source resolver to create the media source.
    if (SUCCEEDED(hr))
    {
        MF_OBJECT_TYPE ObjectType;

        hr = pResolver->CreateObjectFromURL(
                pszFileName,
                MF_RESOLUTION_MEDIASOURCE, 
                NULL,                      
                &ObjectType,               
                &pSourceUnk   
            );
    }

    // Get the IMFMediaSource interface from the media source.
    if (SUCCEEDED(hr))
    {
        hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
    }

    // Get the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = pSource->CreatePresentationDescriptor(&pPD);
    }

    // Get the profile from the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
    }

    SafeRelease(&pResolver);
    SafeRelease(&pSourceUnk);
    SafeRelease(&pSource);
    SafeRelease(&pPD);
    return hr;
}

此範例會使用 SafeRelease 釋放介面指標。

ASF 設定檔