2018-09-28 18:06:05 +03:00
2018-09-28 04:32:53 +03:00
2018-09-21 04:07:32 +03:00
2018-09-28 04:32:53 +03:00
2018-09-25 11:04:39 +03:00
2018-09-21 04:07:32 +03:00
2018-09-28 04:32:53 +03:00
2018-09-28 18:06:05 +03:00

µStreamer

µStreamer - это маленький и очень быстрый сервер, который поволяет организовать трансляцию видео в формате MJPG с любого устройства [V4L2] в сеть. Этот формат нативно поддерживается всеми современными браузерами и большинством приложений для просмотра видео (mplayer, VLC и так далее). µStreamer был разработан в рамках проекта Pi-KVM специально для стриминга с устройств видеозахвата VGA и HDMI с максимально возможным разрешением и FPS, которые только позволяет железо.

Функционально µStreamer очень похож на mjpg-streamer при использовании им плагинов input_uvc.so и output_http.so, однако имеет ряд серьезных отличий. Основные приведены в этой таблице:

Фича µStreamer mjpg-streamer
Многопоточное кодирование JPEG #00aa00 Есть #f03c15 Нет
Аппаратное кодирование с помощью OpenMAX IL на Raspberry Pi #00aa00 Есть #f03c15 Нет
Поведение при физическом отключении устройства
от сервера во время работы
#00aa00 Транслирует черный экран
с надписью NO SIGNAL,
пока устройство не будет подключено снова
#f03c15 Необратимо зависает 1
Поддержка DV-таймингов - возможности изменения
параметров разрешения трансляции на лету
по сигналу источника (устройства видеозахвата)
#00aa00 Есть #f03c15 Нет 1
Дебаг-логи без перекомпиляции,
логгирование статистики производительности,
возможность получения параметров
трансляции по HTTP
#00aa00 Есть #f03c15 Нет
Поддерживаемые входные форматы устройств #ffaa00 YUYV, UYVY,
RGB565, MJPG 2
#00aa00 YUYV, UYVY,
RGB565, MJPG
Поддержка контролов веб-камер (фокус,
движение сервами) и всяких настроек,
типа яркости, через HTTP
#f03c15 Нет #00aa00 Есть
Возможность сервить файлы встроенным
HTTP-сервером
#f03c15 Нет 3 #00aa00 Есть

Сносочки:

  • 1 Для mjpg-streamer существует мой патч, предотвращающий зависание при отключении устройства и добавляющий поддержку DV-таймингов, однако трансляция при этом все равно прерывается. В данный момент этот патч не принят в апстрим, и я даже не гарантирую его стопроцентную работоспособность, поскольку код mjpg-streamer очень плохо структурирован и чрезвычайно запутан, и я мог что-то упустить.

  • 2 Поскольку µStreamer писался в первую очередь для устройств видеозахвата, в нем реализованы только те форматы, которые для них были нужны. MJPG в контексте входных данных означает, что устройство умеет самостоятельно сжимать картинку в JPEG и отдавать ее программе, что позволяет значительно снизить загрузку процессора и избавить его от необходимости кодировать картинку софтом. Этот формат поддерживается большинством веб-камер, но не поддерживается ни одном из встреченных мной устройств видеозахвата; его не умеет ни Auvidea B101, ни EasyCap UTV 007. Нет никаких технических сложностей добавить поддержку аппаратного MJPG источника, просто у меня пока не дошли до этого руки.

  • 3 ... и не будет. µStreamer придерживается концепции UNIX-way, так что если вам нужно нарисовать маленький сайтик со встроенной трансляцией - просто поставьте NGINX.

Languages
C 95.8%
Python 1.5%
Makefile 1.4%
Shell 0.5%
Dockerfile 0.5%
Other 0.3%