Пользовательский TS многофайловый исходный фильтр для DirectShow - PullRequest
0 голосов
/ 18 апреля 2011

У меня проблемы с написанием пользовательского фильтра источника DS для воспроизведения потока TS, который был выгружен в несколько файлов.[ed: смысл повторного воспроизведения непрерывного потока из этих отдельных файлов]

Сначала я попытался изменить образец файла Async: нет, модель извлечения данных, кажется, помещает всю управляющую логику вфильтр сплиттера, чтобы я не мог обмануть его, полагая, что у меня есть «непрерывный» поток.

Итак, попытался изменить образец рабочего стола PushSource: кажется, что мы должны присматривать за демексером MPEG таким образом, чтобы создать его выводпин-код, сам разбираю данные, чтобы получить идентификаторы и т. д. Мне удалось заставить GraphStudio автоматически что-то подключить (используя странный декодер DTV-DVD), но он ничего не воспроизводит, несмотря на фильтр источника, выдвигающий нужные данные вниз по потоку.

Кто-нибудь имеет опыт в этой области, чтобы помочь / предложить что-нибудь?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Нашли ли вы решение вашей проблемы, сейчас?

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

Я создал этот фильтр, начиная с фильтра " Push Source Bitmap ", но мне пришлось внести в него множество изменений.

Мне также пришлось построить график, используя написанное мной приложение (поэтому не используя GraphEdit ), подключить демультиплексор Mpeg-2"к новому фильтру, добавить одно * 1015Выход * PSI (сопоставленный с PID 0 = PAT ) и " Фильтр разделов и таблиц MPEG-2 ", подключенный к этому PSI output.

После этого я использовал « Фильтр разделов и таблиц MPEG-2 » для чтения таблицы PAT и PID PMT. определено внутри.Затем я также сопоставил все PMT PID с одним и тем же фильтром MPEG-2 для секций и таблиц , и проанализировал таблицы PMT для знания элементарных потоков PID и типы мультимедиа, а затем я создал один видеовыход и один аудиовыход на основе этой информации (может быть несколько потоков аудио + видео, но на текущем шаге я сохраняю только первый).Обратите внимание, что для этого необходимо временно запустить частичный график, чтобы иметь возможность анализировать таблицы, а затем остановить его, чтобы иметь возможность создавать выходные выводы видео и аудио (с соответствующими типами мультимедиа) и подключать декодеры и средства визуализации.

В дополнение к этому, у меня есть информация, которую вы можете найти интересной: кажется, что при подключении " Mpeg-2 Demultiplexer " ищет на графике фильтр, выставляющий " IBDA_NetworkProvider"интерфейс, и, если он найден, он регистрируется в нем с помощью IBDA_NetworkProvider :: RegisterDeviceFilter метода.

Я думаю, что вы могли бы использовать это для обнаружения" Mpeg-2 Демультиплексор"вставьте фильтр в график (выставив интерфейс" IBDA_NetworkProvider"из вашего фильтра) и попробуйте выполнить вышеуказанные операции из вашего исходного фильтра, что позволитиспользуйте ваш фильтр внутри GraphEdit и ожидайте, что " Mpeg-2 Demultiplexer " будет иметь значениеот этого фильтра, не беспокоясь о создании приложения для выполнения этих операций.

Gingko

0 голосов
/ 21 апреля 2011

Я создал фильтр источника TS, который читает сетевой поток. Так что это тоже непрерывно, но я отличаюсь от чтения из файла, что сетевой поток автоматически дает мне правильную скорость. Поэтому я думаю, что вы должны использовать аналогичный подход.

Мой фильтр основан на примере FBall из de dx sdk.

Фильтр происходит от CSource, IFileSourceFilter, IAMFilterMiscFlags и ISpecifyPropertyPages. Выходной контакт выводится только из CSourceStream.

Если у вас есть проблемы с декодированием аудио / видео, возможно, сначала попробуйте простой поток mpeg-2, например, из источника DVB. И убедитесь, что у вас установлен декодер, и он принимает этот формат. (например, в ffdshow декодирование mpeg2 по умолчанию отключено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...