Железка на ARM захватывает видео, кодирует и передаёт в сеть, работа с видео ведётся средствами GStreamer 0.10.28.
Необходи по приходу команды снять один в кадр в максимальном разрешение и сохранить его локально, важно - снять кадр необходимо без остановки основного потока.
Пока мне это видется в виде такой схемы:
Код: Выделить всё
кодирование snapshot - локальное сохранение (поток snapshot)
/
захват - tee
\
кодирование основного потока в меньшем разрешение - отправка в сеть (поток video)Кодирование основного потока с отправкой в сеть в первом приближении сделано. Как сделать подобное разделение тоже вроде понятно. Не совсем понятно как управлять этой "гидрой".
Имеющиеся вопросы:
- как включить поток video оставив выключенным поток snapshot, насколько я понял gst_element_set_state(pipeline, GST_STATE_PLAYING) влияет на все элементы
- как остановить поток snapshot после сохранения одного кадра, предполагаю, что для этого можно отслеживать состояние одного из его элементов через GstMessage и по приходу некоего сообщения выключать поток, в этом пукте возвращаемся к первому вопросу
- если выборочное управление состояниями отдельных потоков невозможно, то насколько незаметно для потока video может быть подсоединение/отсоединение потока snapshot и насколько это будет быстро
Спасибо.