2013-12-09 6 views
1

Я пытаюсь использовать настраиваемый фильтр для приема видео и аудио данных из потока RTSP и доставлять образцы вниз по графику. Кажется, что этот фильтр был изменен из SDK source.cpp sample (CSource) и реализовал два выходных вывода для аудио и видео. Когда фильтр напрямую подключен к фильтру avi mux с режимом INTERLEAVE_NONE, он работает нормально.Почему функция GetDeliveryBuffer заблокирована с помощью режима AVLE MULLE INTERLEAVE_CAPTURE?

Однако, когда режим перемежать из AVI мультиплексора установлен в INTERLEAVE_CAPTURE, вывод видео контактного будет висеть на методе GetDeliveryBuffer (в DoBufferProcessingLoop) этот фильтр после того, как несколько образцов были отправлены, в то время как аудио выходного контакт все еще работает Что ж.

Кроме того, когда я вставил бесконечный пин-тройник в один из путей между AVI-муком и этим фильтром источника, граф произвольно превратился в состояние остановки после отправки некоторых выборок (от одного до трех образцов или вида). И когда я помещал фильтр, который является просто пустым фильтром транс-в месте, который ничего не делает после бесконечного тройника, граф вернулся к первому случаю: никогда не поворачивается, чтобы остановить состояние, но висеть на GetDeliveryBuffer.

(Вот изображение, которое показывает связи я упомянул как) enter image description here

Так вот мои вопросы:

1: Какие могут быть причины, что выход видео контактный вешали на GetDeliveryBuffer?

В моей догадке похоже, что avi mux поймал эти буферы и не выпустил их до тех пор, пока их не хватит для чередования, , но даже когда я установил количество буферов видео в 30 в DecideBufferSize, он все равно повиснет. Если причина в том, что так, так, как я могу определить размер буфера булавки для нисходящего avi-мультиплеера?

Вероятно, создание более 50 буферов видеоплеера не гарантируется, потому что размер памяти не может быть обещано. :(

2:?. Почему граф идет остановить состояние, когда бесконечный контактный тройник вставлен А почему бы не-работы фильтра преодолевает его

Любой ответ или предложение оценили Или надеюсь, кто-то просто дайте мне несколько советов.

ответ

1

Заблокировано GetDeliveryBuffer означает, что распределитель, с которого вы запрашиваете буфер, еще не имеет ничего. Все образцы носителей выдающиеся и еще не возвращены обратно в распределитель.

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

Типичная проблема с топологией, о которой идет речь, связана с резьбой. Фильтр мультиплексора, который имеет два входа, должен будет соответствовать входным потокам для создания совместного файла. Достаточно часто во время выполнения он будет удерживать образцы носителей на одной ноге, ожидая, что на другой ноге появятся другие образцы мультимедиа в другой теме. Предполагается, что вышестоящие ветви, обеспечивающие выборки носителей, работают независимо друг от друга, так что блокировка на одной ноге не блокирует другую. Вот почему мультиплексор может свободно блокировать методы IMemInputPin::Receive и/старые образцы носителей.В топологии выше неясно, как именно фильтр источника выполняет потоки. Тот факт, что у него два контакта, заставляет меня предположить, что у него могут быть проблемы с потоками, и он не учитывает, что на мультиплексоре может быть блокировка вниз по течению.

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

+0

Я рассмотрел вопрос о том же вопроснике и проверил, произошел ли он от тупика. Но два булавки действительно используют свою собственную асинхронную очередь. Тем не менее, для меня процесс очередей все еще недостаточно ясен, и это очень вероятно, поэтому я сделаю еще несколько исследований для этого. Благодарю. –

+0

А у вас есть представление о втором вопросе? Возможно, это вызвано проблемой потоковой передачи? –

+0

Что такое Nop Filter? –