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


Получение сведений из объектов заголовков ASF

Сведения о заголовке ASF хранятся в объектах заголовков ASF файла мультимедиа. Media Foundation предоставляет объект ASF ContentInfo для работы с объектом header. Для чтения сведений о заголовке существующего файла приложением требуется заполненный объект ContentInfo. Это достигается путем вызова IMFASFContentInfo::P arseHeader. Если синтаксический анализ выполнен успешно, библиотека ASF для файла, которая поддерживается внутренне Media Foundation, заполняется сведениями заголовка из различных объектов заголовков. Некоторые из этих свойств предоставляются приложению, которые можно получить с помощью атрибутов дескриптора презентации, дескриптора потока, профиля и свойств метаданных.

Полный список атрибутов см. в разделе "Атрибуты Media Foundation" для объектов заголовков ASF.

Получение сведений о заголовке из дескриптора презентации

Объект дескриптора презентации содержит описание конкретного источника мультимедиа, в данном случае — источник мультимедиа ASF. Если вызов ParseHeader завершается успешно, сведения на уровне файла из объекта заголовка хранятся в виде атрибутов в дескрипторе презентации. Чтобы создать дескриптор презентации, вызовите метод IMFASFContentInfo::GeneratePresentationDescriptor. Этот метод возвращает указатель на заполненный объект дескриптора презентации, содержащий эти атрибуты для файла ASF, связанного с объектом ContentInfo. Чтобы получить значения для определенных атрибутов, вызовите методы IMFAttributes::Getxxx в дескрипторе презентации и укажите атрибут MF_PD_ASF_xxx .

В следующем примере кода извлекается длительность воспроизведения файла ASF, заданного объектом ContentInfo.

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 содержит один или несколько дескрипторов потока, представляющих потоки, перечисленные в объекте заголовка. После успешного завершения вызова к IMFASFContentInfo::GeneratePresentationDescriptor базовые дескрипторы потока заполняются сведениями на уровне потока из различных объектов заголовков. Чтобы получить дескриптор потока ДЛЯ потока ASF, вызовите МЕТОД IMFPresentationDescriptor::GetStreamDescriptorByIndex в дескрипторе презентации, созданном из объекта ContentInfo.

Некоторые свойства потока задаются как атрибуты дескрипторов потока. Вызовите методы IMFAttributes::Getxxx в дескрипторе потока и укажите атрибут MF_SD_ASF_xxx .

Полный набор атрибутов дескриптора потока см. в разделе "Атрибуты дескриптора потока, зависят от ASF", перечисленные в атрибутах дескриптора потока.

Получение сведений о заголовке из объекта профиля

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

Сведения об объекте профиля см. в разделе "Профиль ASF ".

Получение метаданных из объектов заголовков

ASF-файл может содержать несколько свойств метаданных, заданных во время кодирования файлов. Приложение может перечислять эти свойства с помощью объекта ContentInfo. Некоторые из этих свойств, таких как сведения о переменной скорости передачи данных (VBR), доступны для приложения с помощью атрибутов дескриптора презентации, дескрипторов потоков и типов мультимедиа для файла мультимедиа. Эти атрибуты задаются в объекте ContentInfo во время инициализации с помощью вызова ParseHeader .

Объект ASF ContentInfo