GStreamer - фреймворк для передачи видео и аудио потоков. Позволяет получать поток с камер, микрофонов и т.п. склеивать их между собой, преобразовывать, выводить на экран, записывать в файл и т.д. и т.п.
Официальный сайт
Общая информация
Вся работа GStreamer построена на принципе т.н. цепочек - pipeline. Их поведение очень напоминает то, как течет вода по трубам. Цепочки собираются из элементов, которые в общем случае можно разделить на 3 группы: источники, приемники и обработчики. Каждый элемент имеет т.н. пады - pads с помощью которых он как раз и стыкуется с другими элементами. Пад может быть либо "источником" - src, либо "сливом" - sink. Таким образом получаем:
- Источники - обладают только падами src, примеры:
- autovideosrc - автоматически пытается определить источник видео и подключиться к нему;
- v4l2src - источник видео с usb камер, расшифровывается как Video for Linux to src.
- Приемники - обладают только падами sink, примеры:
- autovideosink - самый простой вывод картинки на экран, автоматически определяет необходимые параметры;
- glimagesink - вывод на экран картинки из OpenGL (поправьте если ошибаюсь).
- Обработчики - могут иметь по несколько падов обоих видов, примеры:
- tee - элемент, который позволяет дублировать поток, например чтобы вывести его одновременно и на экран и в файл;
- jpegdec - декодирует поток из jpeg для вывода на экран (скорее всего здесь сказано не совсем правильно).
Полезные инструменты
-
gst-device-monitor-1.0 - консольная команда (для Ubuntu, в Raspbian по неустановленной причине может не работать), которая возвращает информацию о подключенных устройствах ввода и вывода. Используется в первую очередь для того, чтобы определить какой формат может воспроизвести подключенная камера. Выбранный формат прописывается в переменную CAPS в скрипте (или вашем коде). Здесь же можно узнать допустимые разрешения изображения, кол-во FPS (кадров в секунду);
-
gst-inspect-1.0 - консольная команда, которая позволяет получить полную информацию об интересующем элементе GStreamer, например: gst-inspect-1.0 autovideosink.
Примеры
Здесь лежат примеры sh-скриптов для отправки и приема видео.
-
sender_double.sh - отправка двух видеопотоков сразу, с аппаратной камеры Raspberry Pi и с USB камеры, отправка идет на IP адрес указанный в переменной DEST. Для корректной работы возможно придется поправить CAPS для USB камеры, чтобы узнать правильные значения используйте gst-device-monitor-1.0;
-
receiver_double.sh - прием двух видеопотоков сразу, с аппаратной камеры Raspberry Pi и с USB камеры, при этом на картинку с камеры Raspberry Pi накладывается картинка с прозрачным фоном;
-
receiver_rpicam.sh и receiver_usbcam.sh - по большому счету это две половинки скрипта receiver_double.sh.
Полезные ссылки