browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

Відеокамера реального часу своїми руками

Posted by on 14 Грудня 2014
raspberry pi video audio cam

raspberry pi video audio cam

Відео.

Спробував підключити свою web-камеру Logitech  HD Webcam C270 до малинки raspberry pi.   Виявляється все дуже просто. Відеопотік береться з вашої камери і стрімітся у мережу у mjpeg форматі. І більшість рішень для стрімінга відео базується на проекті MJPG-streamer.

Існує готове рішення на базі MJPG пакету від хлопця з Румунії, яке має назву  PiEye і дозволяє “з коробки” запустити роботу USB-відеокамери. В Інтернеті є багато прикладів, ось деякі із них:

  1. PiEye – webcam streaming in M-JPG format with Raspberry Pi
  2. Видеотрансляция с помощью веб-камеры на Raspberry PI
  3. How to build and run MJPG-Streamer on the Raspberry Pi

Збережу для себе  послідовність установки:

  1. Ставимо пакет libv4l-0: sudo apt-get install libv4l-0
  2. Завантажуємо пакет mjpg-streamer-rpi: wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi
  3. Змінюємо довгу назву пакета на коротшу: mv get\?download\=36\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz
  4. Розпакуємо: tar -zxvf mjpg-streamer-rpi.tar.gz
  5. Запускаємо роботу відео: ./mjpg-streamer.sh start

В ідеалі, якщо все піде гладко, то своє селфі-відео ви побачите за адресою: http://raspberrypi:8080?action=stream

Ви також можете додати відео до вашої web-сторінки за допомогою тега img<img src="http://raspberrypi:8080?action=stream"/>

Якщо виникають помилки – дивимось налаштування у файлі mjpg-streamer.sh Там же налаштовуємо бажану кількість кадрів на секунду та роздільну здатність. В ідеальному випадку, щоб не було лагів, ваша камера повинна підтримувати апаратне стиснення mjpg – у іншому випадку малинка буде напрягатися і будуть “гальма”.  У мене картинка вийшла чудова, по локальній мережі виходить майже реал-тайм, можна робити IP-камеру або домофон.  Роботу через Інтернет треба буде спробувати.

 

Аудіо.

Трохи погрався із відео і згадав що моя  logitech C270 має вбудований мікрофон, до речі непоганої якості. І подумав, а чому б не прикрутити і аудіо супровід? З цього місця починаються проблеми.

Виявляється науково-технічний прогрес зробив великий крок у передачі відео і чомусь зовсім обділив аудіо. Якщо ідеться мова про просту передачу відео/аудіо потоку між “серверами” то із цим проблем начебто не виникає. Я ж захотів (як думаю так зробив би будь-який  пересічний користувач) слухати звук безпосередньо у вікні свого улюбленого браузера, паралельно із відео-картинкою. Дивно, але начебто більш ресурсо-вибагливий відео-потік браузер через тег img без проблем і лагів виводить, а от звук іде із затримкою або вимагає встановлення стороннього плагіна! Але про це далі.

Дізнаємось номер пристрою у ваші системі, якій може записувати дані з мікрофону:

> sudo arecord -l

**** List of CAPTURE Hardware Devices ****
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

У моєму випадку це: hw:1,0 (або plughw:1) Варто відразу просто перевірити запис звуку у WAV файл командою:

> sudo arecord -D plughw:1 –duration=15 -f cd -v test.wav – якщо все добре, то ідемо далі.

 

RTSP

Спочатку я спробував передати аудіо через RTSP протокол, який фактично розроблений для передачі мультимедіа даних в реальному часі. Я пробував aconv, ffmpeg, vlc,  але безуспішно – пакети видавали помилки або просто не хотіли працювати із ALSA на малині . Згодом я знайшов чудовий проект  LIVE555 Streaming Media набір модулів для стрімінга  по RTSP написаного на С++. Завантажуємо і компілюємо його згідно інструкції на сайті.

Далі ви можете змінювати код і налаштовувати модулі на ваш розсуд. Приведу приклади для стрімініга WAV та MP3 аудіо потоків з stdin-а . Дані приклади  можна скомпілити в папці /testProgs за допомогою команди make

Для стрімінга WAV (testWAVstreamer):

SEL[+]

 

Для стрімінга MP3 (testMP3streamer):

SEL[+]

Ось приклади роботи програм:

Швидкодія Команда Трафік
(~realtime) sudo arecord -D plughw:1 -f S16_LE -r 4000 -c1 | ./testWAVstreamer (~75 kbit/sec)
(~realtime) sudo arecord -D plughw:1 -f S16_LE -r 8000 -c1 | ./testWAVstreamer (~150 kbit/sec)
(2.4 sec) sudo arecord -D plughw:1 -f cd -c1 | lame -b32 – | ./testMP3streamer (~45 kbit/sec)
(1.2 sec) sudo arecord -D plughw:1 -f cd -c1 | lame – | ./testMP3streamer (~75 kbit/sec
(0.6 sec) sudo arecord -D plughw:1 -f cd | lame – | ./testMP3streamer (~150 kbit/sec)

 

Для прикладу взято порт сервера 2222. І якщо відкрити на клієнті VLC адресу:  rtsp://192.168.0.133:2222/testStream то почуємо себе 🙂

Але! з rtsp в браузері виникла проблема. HTML5 сумісні браузери начебто мають грати rtsp потік,  просто у тезі <audio> але вони цього не роблять!  Халепа. Дану проблему можливо вирішити шляхом використання сторонніх плеєрів-плагінів (RealPlayr, QuickTime,VLC), отак наприклад:

<embed type=”application/x-vlc-plugin” pluginspage=”http://www.videolan.org”
width=”160″
height=”100″
id=”vlc”
autoplay=”true”
allowfullscreen=”false”
windowless=”flase”
mute=”false”
loop=”true”
toolbar=”true”
bgcolor=”#111111″
text=”Hello Seka!”
branding=”false”
controls=”true”
target=”rtsp://192.168.0.133:2222/testStream”>
</embed>

Але плагіни часто-густо відлякують користувачів і реалтайм пропадає, бо плеєр додає свою затримку.

 

 

ICECAST+ICES

Потім я спробував використати готове рішення – Icecast 2 Сервер для потокового аудіо мовлення. Наприклад для Інтернет-радіо.

Зв’язка DarkIce and Icecast2 загалом працювала, але з нез’ясованих причин постійна збільшувалась затримка потоку  і потрібні були танці з бубном для установки .

В решті-решт у мене непогано запрацювала зв’язка Ices + Icecast2 – модуль ніби “рідний”. Налаштування першого та другого додаю:

Налаштування для Icecast2  (> sudo nano /etc/icecast2/icecast.xml):

SEL[+]

Налаштування для Ices  (> sudo nano /etc/ices2/ices.xml):

SEL[+]

Запускаємо Icecast сервер:

> sudo service icecast2 restart

І під’єднуємо аудіопотік:

> sudo ices2 /etc/ices2/ices.xml

Начебто працює! Звук, звичайно, іде із затримкою 5-10 сек, мабуть це десь icecast плужить. Але в браузері все грає гладко і не треба ніяких плагінів, а лише тег <audio>:

<audio preload=”none” autoplay=”autoplay”><source src=”http://192.168.0.133:8000/audio.ogg” type=”audio/ogg”>
<source src=”http://192.168.0.133:8000/audio.ogg” type=”audio/mpeg”>
Your browser does not support the audio element.
</audio>

Для онлайн-радіо піде аж бігом, а от для реал-тайма недотягує. В ідеалі хотілось би синхронізоване відео і аудіо близьке до ріал-тайма, тобто є ще над чим ще подумати. Думаю розв’язок існує.

З Новим Роком малята!

selfty
ЛІТЕРАТУРА:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.