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


Настройка выходных контактов Demux

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Когда mpeg-2 demux получает пакет данных, он должен определить, какой выходной контакт должен проанализировать и доставить данные. В режиме потоковой передачи программы demux сопоставляет идентификаторы потоков с выходными контактами. В режиме транспортного потока он сопоставляет ИДЕНТИФИКАТОРы с выходными контактами. Например, если в режиме транспортного потока PID 0x31 сопоставляется с закреплением 0, то каждый пакет TS с этим номером PID направляется в выходной контакт 0. Если demux получает пакет, идентификатор потока или pid которого не сопоставлен ни с каким выходным контактом, он просто удаляет пакет.

В режиме извлечения demux автоматически создает выходные контакты для аудио- и видеопотоков в файле и сопоставляет идентификаторы потоков с контактами.

В режиме принудительной отправки выходные контакты должны быть настроены приложением или другим фильтром. Для источников цифрового телевидения, использующих архитектуру драйвера вещания (BDA), фильтр поставщика сети работает с фильтром TIF, чтобы настроить demux. Приложению не нужно ничего делать. В других сценариях приложение должно настроить выходные контакты.

Demux начинается без выходных контактов. Чтобы создать вывод, вызовите метод IMpeg2Demultiplexer::CreateOutputPin в фильтре. Этот метод принимает тип носителя и имя контакта, а также возвращает указатель IPin . Тип носителя используется, когда контакт подключается к другому фильтру, обычно к декодеру. Пример приведен в разделе Использование Demux с элементарными потоками. Имя закрепления может быть любым, за исключением того, что повторяющиеся имена контактов не допускаются.

Затем назначьте один или несколько идентификаторов потоков или идентификаторов PID новому выводу. Для потоков программы запросите пин-код IMPEG2StreamIdMap и вызовите IMPEG2StreamIdMap::MapStreamId. Для транспортных потоков запросите пин-код IMPEG2PIDMap и вызовите IMPEG2PIDMap::MapPID.

Существует несколько способов синтаксического анализа пакетов TS. Для каждого выходного контакта метод синтаксического анализа определяется параметром MediaSampleContent для метода MapPID .

Значение Описание
MEDIA_ELEMENTARY_STREAM Фильтр предоставляет полезные данные PES. В этом режиме фильтр распаковывает пакеты PES, поэтому подчиненный фильтр получает поток байтов ES без заголовков пакетов PES. (Только аудио- и видеопотоки.)
MEDIA_MPEG2_PSI Фильтр предоставляет полные разделы PSI, такие как таблицы PAT, таблицы PMT, таблицы CAT и т. д.
MEDIA_TRANSPORT_PAYLOAD Фильтр извлекает полезные данные из пакетов TS и доставляет их без дальнейшего анализа. Для элементарных потоков это означает, что demux будет доставлять целые пакеты PES, включая заголовки пакетов PES.
MEDIA_TRANSPORT_PACKET Фильтр доставляет целые пакеты TS. Demux направляет пакеты TS в соответствии с их ИДЕНТИФИКАТОРами, но не проверяет и не обрабатывает пакеты. Пакеты с ошибками не отфильтровываются. Demux не повторно мультиплексирует пакеты, а результирующий выходной поток не является совместимым транспортным потоком MPEG-2. Этот режим называется режимом сквозной передачи .

 

Для потоков программы demux всегда предоставляет полезные данные PES.

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