Поделиться через


Создание профиля ASF

В этом разделе описывается создание профиля ASF в Microsoft Media Foundation.

Создание нового профиля

Чтобы создать пустой профиль ASF, вызовите функцию MFCreateASFProfile . Эта функция возвращает указатель на интерфейс IMFASFProfile . Приложение может использовать этот интерфейс для добавления потоков в профиль и настройки каждого из потоков. Дополнительные сведения см. в статье Создание и настройка потоков ASF.

При необходимости приложение может добавлять объекты взаимного исключения в два или более потоков. См . раздел Использование взаимного исключения для потоков ASF.

Получение профиля из объекта ASF ContentInfo

Приложение может получить профиль ASF существующего ASF-файла из объекта ASF ContentInfo. Профиль уже настроен и содержит параметры для всех потоков в файле.

Инициализируйте объект ContentInfo, проанализировав объект заголовка ASF файла. Это делается с помощью метода IMFASFContentInfo::P arseHeader . После считывания всех объектов заголовков и заполнения библиотеки ASF создается профиль для этого файла. Приложение может получить указатель на этот инициализированный профиль, вызвав IMFASFContentInfo::GetProfile.

Получение профиля из дескриптора презентации

Объект профиля существующего ASF-файла можно получить из дескриптора презентации для файла или из объекта ASF ContentInfo . В этом случае профиль уже настроен и содержит параметры для всех потоков в файле. Это может быть полезно, если вы хотите изменить существующий профиль ASF. Например, может потребоваться повторно закодировать файл Windows Media Video с более низкой скоростью.

Чтобы получить профиль из дескриптора презентации, вызовите MFCreateASFProfileFromPresentationDescriptor. Эта функция анализирует дескриптор презентации и заполняет профиль ASF сведениями о файле мультимедиа. Функция возвращает указатель на интерфейс IMFASFProfile. Затем этот интерфейс можно использовать для изменения профиля.

Чтобы получить дескриптор презентации, вызовите один из следующих методов:

В следующем примере показано, как создать профиль из дескриптора презентации. Функция создает источник мультимедиа для файла, получает дескриптор презентации из источника мультимедиа и создает профиль. В этом примере предполагается, что pszFileName указывает URL-адрес ASF-файла.

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