Потоковое с MJPEG
U4VL
Интерфейс ядра со встроенным HTTP (S) сервером.
http://www.linux-projects.org/uv4l/tutorials/streaming-server/
Веб-интерфейс Raspberry Pi Cam
Хороший проект Silvanmelchior, который развертывает веб-сервер, похожий на DVR, многоцелевой потоковый сервер. Нужно больше информации
https://github.com/silvanmelchior/RPi_Cam_Web_Interface
Устаревший метод
Потоковая передача с помощью mjpg поддерживается практически всеми браузерами, включая Internet Explorer 6. Многие камеры, использовавшиеся до H.264, использовали аппаратное обеспечение mjpg, которое по существу максимально быстро сбрасывало файлы JPEG в папку, а mjpg считывало файл в буфер и удаляло его. их. Некоторые устройства могут достигать скорости 25 кадров в секунду, и даже если у вас плохое соединение, вы получите по крайней мере 1 кадр в секунду.
Поддержка mjpg была прекращена в HD камерах, потому что файл JPEG стал слишком большим для потоковой передачи через Интернет, а H.264 - намного более быстрый и качественный протокол.
Поскольку у нас нет возможности транслировать H.264 с помощью модуля камеры, это выглядит как реальный запасной вариант ...
Это почти мгновенно, но не ожидайте, что получите более 1,5 кадров в секунду. Это до raspistill
того, чтобы быть крайне МЕДЛЕННЫМ! Использование функции замедленной съемки, установленной на 100 мс, которая должна давать нам 10 кадров в секунду, не работает, потому что raspistill
просто затягивается и имеет серьезные проблемы с производительностью внутри себя.
- Измените,
/tmp
чтобы использовать оперативную память для /etc/default/tmpfs
изменения скорости RAMTMP=yes
(это попытка увеличить частоту кадров в секунду, но Rasistill просто не может справиться с самим собой.)
- перезагрузка
- apt-get установить git
- apt-get установить libjpeg8-dev
- apt-get установить libv4l-dev
- apt-get установить imagemagick
- cd
/usr/src
, mkdir mjpg-стример, cd mjpg-стример ...
git clone https://github.com/engine12/mjpg-streamer.git
make USE_LIBV4L2=true clean all
- ДОПОЛНИТЕЛЬНО Если у вас есть ошибки
sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
sudo ln -s /usr/include/lib4l2.h /usr/include/linux/lib4l2.h
- Внутри make-файла закомментируйте все плагины, кроме input_file и output_http, и выполните make снова. У меня было много проблем здесь.
- Скопируйте двоичный,
mjpg_streamer
и его плагинов input_*.so
и output_*.so
к /usr/local/bin
. В противном случае, запустите его прямо из каталога src.
- Необязательный конец
mkdir /tmp/stream
raspistill -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
LD_LIBRARY_PATH=./ ./mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w ./www"
(запустите это там, где находятся бинарный файл и плагины)
- Перейти к
http://<IP-address>:8080
- Вот несколько вариантов, наслаждайтесь «живой» трансляцией по старинке… поддерживаемой большинством браузеров - современными, старыми и экспериментальными.
Я боролся за то, чтобы скомпилировать его в течение примерно 5 часов ... вздох , но я думаю, что я буду использовать это, поскольку я могу получить доступ к потоку с любого телефона и любого браузера. Мне просто нужно подождать, пока у нас не появятся лучшие водители ... Еще год или два. :(
Независимо от того, какое качество я пробую, я получаю не быстрее или не медленнее, чем 1 кадр / с, используя стрим. Я использовал 720p и 1080p, и только качество изображения улучшается, но fps не имеет значения в локальной сети. Я предполагаю, что меньшие настройки помогут с WAN / 3G или другими радиопередачами.
Rasistill записывает изображение в один файл. Это может быть узким местом. Он записывает файл, mjpg strreamer читает его и удаляет, вызывая блокировку ввода-вывода, поэтому raspistill не может записать в файл.
Единственное, о чем я могу думать, - это использовать raspivid по каналу FFmpeg , который создаст файлы JPEG для нас - мне нужно попробовать это, и, возможно, это намного быстрее, чем использовать raspistill. Мне удалось получить 25 кадров в секунду с шокирующим качеством, и это было задержано примерно на 10 секунд ... Изменение настроек дало мне около 3 кадров в секунду, но процессор на 100%. Для обработки видеопотока не используется оборудование ...
raspivid -w 640 -h 480 -fps 25 -vf -t 86400000 -b 1800000 -o - \
ffmpeg -i - \
-f image2(?) \
-c:v mjpeg \
stream%d.jpg
Я также читал и обнаружил, что мы можем использовать %d
в имени выходного файла raspistill. Интересно, увеличит ли это fps. Также JPG кодирование аппаратно ускорено, поэтому я действительно пытаюсь понять, почему это так медленно ...
Я получил ошеломляющие 2 FPS, используя %d
в имени файла. По какой-то причине запись файла JPEG ужасно медленна от расписта. Вздох.