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

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

Когда MPEG-2 demux получает пакет данных, он должен определить, какой выходной контакт должен анализировать и доставлять данные. В режиме потоковой передачи программы демультиплексор сопоставляет идентификаторы потоков с выходными контактами. В режиме транспортного потока идентификаторы потоков сопоставляются с выходными контактами. Например, в режиме транспортного потока, если PID 0x31 закреплён за пином 0, то каждый пакет с этим номером PID направляется в выходной пин 0. Если демультиплексор получает пакет, идентификатор потока или PID которого не сопоставлены с каким-либо выходным штырем, он просто удаляет пакет.

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

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

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

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

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

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

 

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

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