Образец фильтра средства синтаксического анализа PSI

Описание

Фильтр средства синтаксического анализа PSI получает сведения о программе (PSI) из транспортного потока MPEG-2 и извлекает сведения о программе из таблицы взаимосвязей программ (PAT) и таблиц схемы программы (PMT). Эта информация позволяет приложению настроить демультиплексор MPEG-2. Фильтр поддерживает пользовательский интерфейс IMpeg2PsiParserдля получения сведений PSI.

Этот фильтр предназначен для устройств MPEG-2, таких как видеокамеры MPEG-2 (IEEE 1394) и устройства D-ВХС. Дополнительные сведения см. в разделе драйвер мстапе . Источники вещания цифрового телевидения должны использовать фильтр TIF для получения сведений о программе.

Использование

Проверить фильтр анализатора PSI в Графедит можно следующим образом:

  1. Запустите Графедит.

  2. Вставьте источник транспорта MPEG-2. Видеокамеры MPEG-2 и устройства D-ВХС отображаются в категории источников видеозаписи как "устройство подразделений Microsoft AV/C".

  3. Подключение фильтр источника для фильтра демультиплексора MPEG-2.

  4. Используйте страницу свойств в демультиплексирование, чтобы создать выходной ПИН-код с типом носителя MPEG-2 PSI. Этот ПИН-код доставляет разделы PAT и ПЛТ.

  5. Используйте страницу свойств демультиплексирование, чтобы связать идентификатор потока 0x00 с выходным закреплением. Задайте тип содержимого "разделы MPEG2 PSI".

  6. Подключение закрепление выходных данных демультиплексирование в средстве синтаксического анализа PSI, как показано на следующей схеме.

    граф фильтра средства синтаксического анализа psi

  7. Запустите граф, чтобы передать данные PSI в фильтр средства синтаксического анализа PSI. По мере того как фильтр декодирует разделы PAT, он автоматически сопоставляет идентификаторы исходящих данных ПЛТ с одним и тем же выходным закреплением на демультиплексирование, чтобы он получал разделы ПЛТ.

  8. Используйте страницу свойств средства синтаксического анализа PSI для выбора номера программы. В списке простейших потоков на странице свойств будет показан идентификатор процесса и тип потока, связанный с каждым из простейших потоков в выбранной программе. Страница свойств предназначена для распознавания типов потоков, определенных в стандарте ISO/IEC 13818-1.

  9. Введите номер PID в поле ввода аудио PID и номер PID видео в поле редактирования PID .

  10. Нажмите кнопку Просмотреть программу . Средство синтаксического анализа PSI настроит контакты вывода в демультиплексирование в соответствии со сведениями о потоке программы и отрисовывает контакты.

Примечание

Страница свойств средства синтаксического анализа PSI предназначена для упрощения тестирования и предоставления примера кода, который настраивает демультиплексор MPEG-2. Не рекомендуется использовать приложения. Приложения должны программно настраивать демультиплексирование.

Чтобы использовать фильтр анализатора PSI в приложении, начните с создания графа фильтра из источника MPEG-2 в формат MPEG-2 демультиплексирование. Код для этого шага здесь не показан, так как точная конфигурация графа будет зависеть от источника.

Затем создайте закрепление вывода на демультиплексирование для данных PSI. Сопоставьте идентификатор потока 0x00, зарезервированный для разделов PAT, с этим закреплением, как показано в следующем коде:

// Set the media type to MPEG-2 table sections.
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = KSDATAFORMAT_TYPE_MPEG2_SECTIONS;

// Create the pin.
IPin *pPsiPin;
hr = pDemux->CreateOutputPin(&mt, L"PSI", &pPsiPin);
if (SUCCEEDED(hr))
{
    // Map to PID 0.
    ULONG Pid = 0x00;
    hr = pPid->MapPID(1, &Pid, MEDIA_MPEG2_PSI);
}

Дополнительные сведения см. в разделе Использование демультиплексора MPEG-2.

Добавьте фильтр средства синтаксического анализа PSI в граф и соедините его с выходным закреплением на демультиплексирование. Запросите средство синтаксического анализа PSI для интерфейса IMpeg2PsiParser . Теперь запустите граф и дождитесь _ _ событий изменения программы EC, которые сообщают о новом разделе Pat или ПЛТ. Это событие является пользовательским событием, определенным фильтром средства синтаксического анализа PSI. При получении _ события изменения программы EC _ можно получить доступные сведения PSI, вызвав методы IMpeg2PsiParser . В этом разделе описываются наиболее часто используемые методы.

Чтобы получить количество программ, используйте метод IMpeg2PsiParser:: жеткаунтофпрограмс :

int NumProgs = 0;
hr = pPsi->GetCountOfPrograms(&NumProgs);

Чтобы получить номер программы для конкретной программы, используйте метод IMpeg2PsiParser:: жетрекордпрограмнумбер :

WORD ProgNum = 0;
for (int i = 0; i < NumProgs; i++)
{
    hr = pPsi->GetRecordProgramNumber(i, &ProgNum);
    ...
}

Номер программы используется для получения записей о выплатах для отдельных программ. Чтобы получить количество простейших потоков в программе, используйте метод жеткаунтофелементаристреамс :

WORD cElemStreams = 0;
hr = pPsi->GetCountOfElementaryStreams(ProgNum, &cElemStreams);

Для каждого элементарного потока метод IMpeg2PsiParser:: жетрекорделементарипид возвращает идентификатор процесса, а метод IMpeg2PsiParser:: жетрекордстреамтипе Возвращает тип потока:

BYTE ESType = 0;
WORD ESPid = 0;
for (WORD j = 0; j < cElemStreams; j++)
{
    hr = pPsi->GetRecordElementaryPid(ProgNum, j, &ESPid);
    hr = pPsi->GetRecordStreamType(ProgNum, j, &ESType);
}

Идентификатор процесса и тип потока позволяют настроить новые выходные сигналы в демультиплексоре MPEG-2. Для этого может потребоваться знание исходного источника. Например, ISO/IEC 13818-1 определяет типы потоков с 0x80 по 0xFF как "пользователь Private", но другие стандарты, основанные на MPEG-2, могут назначить другие значения для этих типов.

Демультиплексор MPEG-2 может создавать новые и новые сопоставления идентификаторов PID во время работы графа, но для соединения ПИН-кодов необходимо отключить граф.

Загрузка образца

чтобы скачать примеры пакета SDK для DirectShow, установите последнюю версию Windows SDK.

этот пример устанавливается по следующему пути: [ ] корневые примеры SDK \ \ мультимедиа \ DirectShow \ фильтры \ псипарсер.

DirectShow Регистрируют

Интерфейс IMpeg2PsiParser