Получение сведений из объектов заголовков 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 .
Связанные темы