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

08 мая 2018, 07:14

Ранее Уважаемый 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 к камере

sudo usermod -aG video pi

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

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -pix_fmt yuv420p  -c:v h264_omx  output.mkv

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

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 следующие строки, не забывая про правильное форматирование:

{
"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"
                    }
                }
             ]
}

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

На этом все - камера будет работать.

 Теперь можете поместить ее в комнату с датчиком движения и на датчике активировать "Допуск уведомлений". 

Когда датчик зафиксирует движение, то вам на телефон придет уведомление с кадром с камеры, по тапу на которое у вас откроется прямая трансляция с камеры. 


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) отредактировано год назад

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

  2. Олег Челбаев (sprut)
    Олег Челбаев (sprut) отредактировано год назад

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

  3. Илья Гитлин (iGitlin)
    Илья Гитлин (iGitlin) отредактировано год назад

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

    а так же Putty для работы с терминалов малинки.

  4. Илья Гитлин (iGitlin)

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

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

    на

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

    и так далее

  5. Артём Суровцев (surovtsev.artyom)

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

    • (dmn)
      (dmn) отредактировано 7 месяцев назад

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

  6. Gülahmet Müslim (axyskus)
    Gülahmet Müslim (axyskus) год назад

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

  7. (11111986)
    (11111986) 7 месяцев назад

    Спасибо!

  8. Алексей Фролин (plutos)
    Алексей Фролин (plutos) 7 месяцев назад

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

    [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

    • Алексей Фролин (plutos)
      Алексей Фролин (plutos) отредактировано 6 месяцев назад

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

      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
  9. Алексей Фролин (plutos)
    Алексей Фролин (plutos) 6 месяцев назад

    Вот код сервиса под названием 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

  10. Никита Кузнецов (ferus.dev)

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

К списку статей

Похожие статьи

15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
25 ноября 2018, 18:23
Умное зеркало добавляем модули Airplay и Google Calendar
30 июня 2018, 12:17
Добавляем устройства управляемые по ИК через Broadlink RM3 Mini на примере кондиционера.
25 сентября 2018, 07:06
Делаем умный замок с интеграцией в HomeKit