Статья

Подключаем USB Web камеру к homebridge

Ранее Уважаемый Eduard Sallo [Edward]  уже рассказал в статье Установка Homebridge на Raspberry. Версия для начинающих как быстро и просто установить Homebridge на микрокомпьютер Raspberry PiЕсли у вас завалялась USB Web камера, по почему бы не попробовать подключить ее к homebridge для последующего отображения в приложении Дом ваших iOS устройств. Я без проблем подключил HP Webcam 3110.Нам понадобиться Малинка c установленным homebridge и плагином homebridge-camera-ffmpeg, а так же Putty для работы с терминалов малинки.Первым делом подключаем к RaspberryPi (я бы рекомендовал использовать модель Raspberry Pi 3b) вашу камеру , желательно в USB порты которые находятся дальше от Ethernet порта

Затем подключаемся через Putty к вашей малинке, в программе нужно указать ip адрес малины и выбрать тип подключения SSH. После подключения нужно ввести ваш логин это как правило pi и пароль, если не меняли со стандартного то raspberry.Вводим команду - она открывает доступ пользователю под которым запущен homebridge к камере

bash
Копировать
sudo usermod -aG video pi

На всякий случай перезагрузите малинку и снова подключитесь к ее терминалу, теперь проверим работает ли ваша камера, для его вводим команду:

bash
Копировать
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -pix_fmt yuv420p  -c:v h264_omx  output.mkv

если камера работает то в терминале вы увидите следующее:

bash
Копировать
ffmpeg version N-90468-g0dc11d8bbd Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Raspbian 6.3.0-18 rpi1 deb9u1) 20170516
  configuration: --prefix=/usr/local --arch=armel --target-os=linux --enable-omx-rpi --enable-nonfree --enable-gpl --enable-libfdk-aac --enable-mmal --enable-libx264 --enable-decoder=h264 --enable-network --enable-protocol=tcp --enable-demuxer=rtsp
  libavutil      56. 12.100 / 56. 12.100
  libavcodec     58. 16.100 / 58. 16.100
  libavformat    58. 10.100 / 58. 10.100
  libavdevice    58.  2.100 / 58.  2.100
  libavfilter     7. 13.100 /  7. 13.100
  libswscale      5.  0.102 /  5.  0.102
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[video4linux2,v4l2 @ 0x2822290] The driver changed the time per frame from 1/30 to 1/10
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 112245.051873, bitrate: 147456 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 147456 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_omx))
Press [q] to stop, [?] for help
[h264_omx @ 0x2825700] Using OMX.broadcom.video_encode
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf58.10.100
    Stream #0:0: Video: h264 (h264_omx) (H264 / 0x34363248), yuv420p, 1280x720, q=2-31, 200 kb/s, 10 fps, 1k tbn, 10 tbc
    Metadata:
      encoder         : Lavc58.16.100 h264_omx
frame=    6 fps=0.0 q=-0.0 size=       1kB time=00:00:00.50 bitrate=  11.4kbits/frame=   11 fps= 11 q=-0.0 size=       1kB time=00:00:01.00 bitrate=   5.7kbits/frame=   16 fps= 10 q=-0.0 size=      24kB time=00:00:01.50 bitrate= 133.2kbits/frame=   21 fps= 10 q=-0.0 size=      24kB time=00:00:02.00 bitrate=  99.9kbits/frame=   26 fps= 10 q=-0.0 size=      51kB time=00:00:02.50 bitrate= 165.7kbits/frame=   31 fps= 10 q=-0.0 size=      51kB time=00:00:03.00 bitrate= 138.1kbits/frame=   36 fps= 10 q=-0.0 size=      51kB time=00:00:03.50 bitrate= 118.3kbits/frame=   41 fps= 10 q=-0.0 size=      86kB time=00:00:04.00 bitrate= 177.0kbits/frame=   46 fps= 10 q=-0.0 size=      86kB time=00:00:04.50 bitrate= 157.4kbits/frame=   51 fps= 10 q=-0.0 size=     118kB time=00:00:05.00 bitrate= 192.7kbits/frame=   56 fps= 10 q=-0.0 size=     118kB time=00:00:05.50 bitrate= 175.2kbits/frame=   61 fps= 10 q=-0.0 size=     118kB time=00:00:06.00 bitrate= 160.6kbits/frame=   66 fps= 10 q=-0.0 size=     148kB time=00:00:06.50 bitrate= 186.5kbits/frame=   71 fps= 10 q=-0.0 size=     148kB time=00:00:07.00 bitrate= 173.2kbits/frame=   76 fps= 10 q=-0.0 size=     177kB time=00:00:07.50 bitrate= 193.4kbits/frame=   81 fps= 10 q=-0.0 size=     177kB time=00:00:08.00 bitrate= 181.3kbits/frame=   86 fps= 10 q=-0.0 size=     206kB time=00:00:08.50 bitrate= 198.1kbits/frame=   92 fps= 10 q=-0.0 size=     206kB time=00:00:09.10 bitrate= 185.0kbits/frame=   96 fps= 10 q=-0.0 size=     206kB time=00:00:09.60 bitrate= 175.4kbits/frame=  101 fps= 10 q=-0.0 size=     235kB time=00:00:10.10 bitrate= 190.7kbits/frame=  105 fps=9.9 q=-0.0 Lsize=     262kB time=00:00:10.60 bitrate= 202.1kbits/s speed=   1x
video:260kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.688294%

для остановки нажмите q, а в папке /home/pi/ будет лежать файл output.mkv - если его скачать например с помощью программы WinSCP, то можно  посмотреть его в медиаплеере.Если ничего из вышеуказанного не получилось, то скорее всего ваша камера не поддерживается ядром Linux на котором работает малинка, тогда можно попробовать поискать драйвера для нее в интернете.Если с видео все  порядке, то переходим к подключению камеры к homebridge - для этого добавляем в ваш config.json следующие строки, не забывая про правильное форматирование:

json
Копировать
{
"platform": "Camera-ffmpeg",
      "cameras": [ {
                    "name": "Камера Web",
                    "videoConfig": {
                        "source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video0",
                        "maxStreams": 2,
                        "maxWidth": 1280,
                        "maxHeight": 720,
                        "maxFPS": 20,
                        "maxBitrate": 1536,
                        "vcodec": "h264_omx"
                    }
                }
             ]
}

Перезапускайте бридж и добавляйте камеру в Дом - в приложении жмем на " " в верхнем правом углу,
далее добавить аксессуар и затем выбирайте "Нет кода или не можете сканировать?"  - появится камера, тапаете по ней и вводите пин код от вашего моста. На этом все - камера будет работать. Теперь можете поместить ее в комнату с датчиком движения и на датчике активировать "Допуск уведомлений". Когда датчик зафиксирует движение, то вам на телефон придет уведомление с кадром с камеры, по тапу на которое у вас откроется прямая трансляция с камеры. 


????????????

Вторая жизнь старым вещам ;)

нужна возможность редактировать статьи, а то очепатки вылезают


а так же https://sprut.ai/client/article/59">Putty для работы с терминалов малинки.

Кстати легко подключилась камера от PlayStaion 3., Можно одновременно использовать несколько USB камер, просто тогда в конфиге дописываем для второй и тд камеры свой блок заменив только

"source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video0",

на

"source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video1",

и так далее

А есть хотя бы приблизительный перечень совместимых камер или на что обращать внимание при покупке камеры под такое дело?

На сайте плагина ffmpeg на GitHub есть список с протестированными камерами.

отличная статья. спасибо автору. по моему любая завалявшаяся вебкамера подойтёт

Спасибо!

Подскажите пожалуйста, как? Не могу пробросить поток с видеорегистратора

[12/22/2018, 6:39:31 PM] [Camera-ffmpeg] Start streaming video from Peephole with 1280x720@299kBit
ffmpeg -rtsp_transport tcp -y -i rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp -map 0:0 -vcodec h264_omx -pix_fmt yuv420p -r 20 -f rawvideo -tune zerolatency -vfscale=1280:720 -b:v 299k -bufsize 299k -payload_type 99 -ssrc 14522480 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params OE6rCjHb2BFM4hnd4LwCNfeT3zBLO0ibPvOWcBP3 srtp://10.1.1.5:49713?rtcpport=49713&localrtcpport=49713&pkt_size=1316
ffmpeg version N-92712-g011c9112a0 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516
configuration: --prefix=/usr/local --arch=armel --target-os=linux --enable-omx-rpi --enable-nonfree --enable-gpl --enable-libfdk-aac --enable-mmal --enable-libx264 --enable-decoder=h264 --enable-network --enable-protocol=tcp --enable-demuxer=rtsp
libavutil 56. 24.101 / 56. 24.101
libavcodec 58. 42.102 / 58. 42.102
libavformat 58. 24.101 / 58. 24.101
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 46.101 / 7. 46.101
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[rtsp @ 0x353c490] Nonmatching transport in server reply
rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp: Invalid data found when processing input
[12/22/2018, 6:39:31 PM] [Camera-ffmpeg] ERROR: FFmpeg exited with code 1



Отвечу сам на свой вопрос, может кому пригодиться.


VLC оказался единственным плеером, который смог воспроизвести поток с моего видео-регистратора, данный способ почти не требует ресурсов для кодирования и может использоваться для ретрансляции почти любого видео потока, перепробовал более 30 разных источников видео трансляций из интернета )


Установка:


apt install vlc


Настройка ретрансляции:


touch /home/pi/.scripts/ip_cam_vlc1.sh


chmod +x /home/pi/.scripts/ip_cam_vlc1.sh


nano /home/pi/.scripts/ip_cam_vlc1.sh




В /home/pi/.scripts/ip_cam_vlc1.sh добавляем строчку:


#!/bin/bash


cvlc -d "rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8088}"


sleep 5


cvlc -d "rtsp://10.1.1.9:554/user=user&password=user&channel=3&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8089}"



где rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp - ссылки на потоки с ip-камер с именем пользователя и паролем


rtsp://:8088/ - ссылка на rtsp-поток с сервера, на который установлен vlc


-d - запускать в режиме демона


--http-reconnect --loop --repeat ключи для восстановления соединения после разрыва или проблемах сети


Созданный скрипт нельзя запускать из под root! Добавляем
в автозагрузку из под обычного пользователя "pi" 



sudo nano

/etc/rc.local

В
/etc/rc.local добавляем строчку перед exit 0

:



sudo -u pi /home/pi/.scripts/ip_cam_vlc1.sh



В /home/pi/.homebridge/config.json добавляем строчку:



{



"platform": "Camera-ffmpeg",


"cameras": [


{



"name": "Peephole",



"videoConfig": {



"source": "-re -i rtsp://127.0.0.1:8088/",



"maxStreams": 2,


"maxWidth": 1280,



"maxHeight": 720,



"maxFPS": 20,



"maxBitrate": 1536,



"vcodec": "h264_omx"


}


},



{



"name": "Entrance",



"videoConfig": {



"source": "-re -i rtsp://127.0.0.1:8089/",



"maxStreams": 2,


"maxWidth": 1280,


"maxHeight": 720,


"maxFPS": 20,


"maxBitrate": 1536,


"vcodec": "h264_omx"


}



}


]



}






Перезагружаемся.


2000x2000x_image.jpg?1545792963

Вот код сервиса под названием vlc1.service, который размещен в /etc/systemd/system


[Unit]


Description=vlc1 Service on %I


After=network.target


[Service]


Type=simple


KillSignal=HUP


User=pi


SyslogIdentifier=vlc1_%i


ExecStart=/usr/bin/cvlc "rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8088}"


#Restart=always


Restart=on-failure


RestartSec=10


KillMode=process


[Install]


WantedBy=multi-user.target


Теперь нужно установить правильные права на файл:


# sudo chmod 644 /etc/systemd/system/vlc1.service


Команды


# sudo systemctl start vlc1



# sudo systemctl enable vlc1


# sudo systemctl restart vlc1


Посмотреть статус можно


# systemctl status vlc1

Подобное можно реализовать в HomeAssistant?

Добрый вечер камера добавилась но висит черным квадратом значок камеры перечеркнут что делать куда смотреть ???

почему нет звука с веб камеры при таких условиях?

как ускорить запуск прямого эфира в таком случае?


Вернуться назад
Вернуться назад