Настройка выходных контактов 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.
Связанные темы