Потокове передавання за допомогою 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
використовувати RAM для швидкості /etc/default/tmpfs
- зміна RAMTMP=yes
(Це зусилля для збільшення fps, але raspistill просто не може тримати себе.)
- Перезавантажте
- apt-get install git
- apt-get install libjpeg8-dev
- apt-get install libv4l-dev
- apt-get встановити imagemagick
- cd
/usr/src
, mkdir mjpg-streamer, cd mjpg-streamer ...
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
- Всередині makefile коментуйте всі плагіни, крім input_file та output_http, і зробіть знову. У мене було тут багато питань.
- Скопіюйте двійковий файл,
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 або інших радіопередач.
raspistill записує зображення в один файл. Це може бути вузьким місцем. Він записує файл, 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 апаратно прискорено в raspistill, тому я дуже намагаюся зрозуміти, чому це так повільно ...
Я отримав приголомшливі 2 FPS, використовуючи %d
в імені файлу. Чомусь написання файлу JPEG страшенно повільне від raspistill. Зітхнути.