udvnl

<<< Back

Возможность создания видео звонков у MajorDoMo (RPI +WebCam)

Не так давно у меня на ноутбуке сломалась видеокамера. В связи с этим купил одну из дешевых вебкамер.
Потом возникла мысль, а что если её подключить к своему одноплатнику, и попробовать сделать ведеовызовы. Может и пригодится кому такое решение.
В этой заметке речь пойдет про установку актуального терминального клиента Linphonec, организацию видеовызова на телефон Android через SIP провайдера Zadarma, управление звонками посредством демона из терминала Linux и MajorDoMo.

Сразу хочу заметить, что консольный клиент Linphonec устанавливаемый из репозитория и немного описанный в предидущей заметке, устаревший и не подходит для организации видео вызовов.
Системы развернута на базовом образе для RPI v3_40_int из коробки без установки чего либо. Почему то в версии 3_41 не удалось никак запустить утилиту Linphonecsh для управления.
Вебкамера, которую я использовал - бюджетная (около 7 уе, в Минске) Ritmix RVC-015M. Имеет возможность ручной настройки фокуса.
Для осуществления видеовызовов нам требуется две учетные записи на SIP сервере. Можно установить свой, пока расмотрим на примере сервиса Zadarma.com
Для осуществления видеовызовов нужно предварительно зарегестрироваться на нём или другом SIP сервере (можно и поднять свой).

Установка и сборка Linphone

Для увеличения ресурсов RPI временно останавливаем запущенные службы, иначе у нас не хватит оперативной памяти при компиляции:
sudo systemctl stop majordomo.service
sudo systemctl stop avahi-daemon.socket
sudo systemctl stop avahi-daemon.service
sudo systemctl stop mosquitto.service
sudo systemctl stop mariadb.service
sudo systemctl stop mpd.service
sudo systemctl stop mpd.socket
sudo systemctl stop homebridge.service
sudo systemctl stop nginx.service
sudo systemctl stop bluetooth.target
sudo systemctl stop bluetooth.service

Создание временного файла подкачки swap

На всякий случай можем сделать, временный (до перезапуска) файл подкачки, (место на жестком диске), которое операционная система использует в случае нехватки оперативной памяти.
Проверить, включен ли в нашей установке Raspbian (Debian) файл подкачки, можно набрав:
sudo swapon --show
Вывод пуст, это означает, что в системе отсутствует файла подкачки.
Добавим 1G swap и создадим файл:
sudo fallocate -l 1G /swapfile
Только пользователь root может читать и писать в файл подкачки, поэтому устанавливаем правильные разрешения:
sudo chmod 600 /swapfile
Используем инструмент mkswap для настройки области подкачки Linux в файле и активируем его, набрав команды:
sudo mkswap /swapfile
sudo swapon /swapfile

Установка консольного SIP клиента Linphonec

Для сборки пакета из исходников устанавливаем дополнительные зависимости:
sudo apt-get install cmake automake autoconf libtool intltool yasm libasound2-dev libpulse-dev libv4l-dev nasm git libglew-dev
Переходим в домашнюю директорию:
cd /home/pi/
Скачиваем сам пакет Linphone, скачивание заняло минут 20.
git clone git://git.linphone.org/linphone-desktop.git -recursive
Переходим в созданную директорию при скачивании пакета:
cd linphone-desktop

Подготавливаем к установке версию без графического интерфейса:

sudo ./prepare.py no-ui -DENABLE_OPENH264=ON -DENABLE_WEBRTC_AEC=OFF -DENABLE_UNIT_TESTS=OFF -DENABLE_MKV=OFF -DENABLE_FFMPEG=ON -DENABLE_CXX_WRAPPER=OFF -DENABLE_NON_FREE_CODECS=ON -DENABLE_VCARD=OFF -DENABLE_BV16=OFF -DENABLE_V4L=OFF

Выполняем сборку используя атрибут –j4 (т.е. выполняет сборку в 4 потока одновременно:
sudo make -j4
Сборка занимает минут 30-40.
Собранные файлы программ появились в директории OUTPUT/no-ui/bin. Для запуска программы перейдём в неё:
cd OUTPUT/no-ui/bin
Проверяем версию программы:
./linphonec -v
Получаем результат: version: 3.12.0
Перегружаем наш Raspberry
При перезапуске восстанавливаются все сервисы прописанные в автозагрузке, удаляетсся файл подкачки.

Настройка терминального SIP клиента Linphonec

Запустим Linphonec в режиме автоответа от текущего пользователя pi:

/home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec

При первом запуске, Linphonec пытается создать файл базы данных и файл настроек. Однако запуск происходит с ошибками и программа останавливается.

ошибки при запуске Linphonec
2019-10-07 09:39:18:727 mediastreamer-error-Connection to the pulseaudio server failed
2019-10-07 09:39:18:940 liblinphone-fatal-Unable to open linphone database.
Aborted

Первоначально разберемся с последней ошибкой, открытия файла БД.
Файл БД, который пытается создать программа, должен быть расположен в домашней директории, по следующему пути: /home/pi/.local/share/linphone , однако этой директории не существует. Создадим её:
Файл (или директория) в Linux считается скрытым (hidden), если его название начинается с символа точка «.». Например, «.myfile». Обычно такие файлы используются приложениями для хранения настроек, конфигураций и другой информации, которую нужно скрыть от пользователя.
mkdir /home/pi/.local
mkdir /home/pi/.local/share
mkdir /home/pi/.local/share/linphone
Снова запустим клиента:
/home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec

С первой проблемой создания БД мы разобрались, при первоначальном запуске программа сформировала файл базы данных /home/pi/.local/share/linphone/linphone.db. Осталась ошибка (предупреждение) о невозможности соединения с Pulseaudio server, её будем игнорировать, на функциональность программы она практически не влияет. Также Linphonec при первом запуске формирует файл настроек в домашгей директории .linphonerc при изменении в программе меняется и настроечный файл.
Второе предупреждение об выключенной функции видео звонков.
Warning: video is disabled in linphonec, use -V or -C or -D to enable.
Но программа уже функционирует и дает возможность создания учетной записи и организации аудиозвонков.
Зарегестрируемся в самом клиенте Linphonec:
register sip:xxxxxx@sip.zadarma.com sip.zadarma.com PASSWORD
Проверим регистрацию:
status register
registered, identity=sip:521164@sip.zadarma.com duration=3600
Выходим из программы по CTRL+X
В файле настроек, с помощью текстового редактора, можем посмотреть свои данные о регистрации.

Подключаем видеокамеру.
Проверяю, включена ли моя учетная запись в группу video
cat /etc/group | grep video
video:x:44:pi
Посмотрим определилась ли веб-камера в вашей системе:
sudo ls -l /dev/ | grep video
При неподключенной вебкамере вывод:
crw-rw---- 1 root video 29, 0 Oct 6 08:17 fb0
crw-rw---- 1 root video 243, 0 Oct 6 08:17 vchiq
crw-rw---- 1 root video 248, 0 Oct 6 08:17 vcio
crw-rw---- 1 root video 244, 0 Oct 6 08:17 vcsm
crw-rw---- 1 root video 81, 0 Oct 6 08:17 video10
crw-rw---- 1 root video 81, 1 Oct 6 08:17 video11
crw-rw---- 1 root video 81, 2 Oct 6 08:17 video12

При подключенной добавляются строки с Video0 и video1:
crw-rw---- 1 root video 29, 0 Oct 6 08:17 fb0
crw-rw---- 1 root video 243, 0 Oct 6 08:17 vchiq
crw-rw---- 1 root video 248, 0 Oct 6 08:17 vcio
crw-rw---- 1 root video 244, 0 Oct 6 08:17 vcsm
crw-rw---- 1 root video 81, 3 Oct 7 10:20 video0
crw-rw---- 1 root video 81, 4 Oct 7 10:20 video1

crw-rw---- 1 root video 81, 0 Oct 6 08:17 video10
crw-rw---- 1 root video 81, 1 Oct 6 08:17 video11
crw-rw---- 1 root video 81, 2 Oct 6 08:17 video12

Камера опредилилась в системе. Проверим опредилился ли микрофон от камеры:
sudo arecord -l

  • List of CAPTURE Hardware Devices
    card 1: CAMERA [USB2.0 PC CAMERA], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0
    Всё в порядке, микрофон тоже есть. Проверим его в алсе

    `alsamixer*

Сразу уточню, микрофон у меня по умолчанию включен, определился как основной и выкручен полностью на громкую (в винде тоже), идет дикое переусиление, опустим его уровень до нуля, в алсамиксере курсорными клавишами ввниз.

В маркете приложений для Android устанавливаю приложение Linphone (перепробовал несколько, только у него завелась видеотрансляция. На windows все SIP клиенты, которыми я пользуюсь - работают без проблем. Так же без проблем заводится на моем SIP сервере (freeswitch, если использовать в локальной, да и не только сети, то наилучший вариант свой сервер + шлюз для звонков из своей локальной сети).
Инстроукция по настройке приложения для Android Linphone приведена на сайте Zadarma.com
Инструкия от SIP провайдера:
Проведем регистрацию мобильного телефона на Zadarma.
Для тестирования запустим в RPI linphonec с функцией видеозвонка и автоответа (добавив ключи -V -a)
/home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec -V -a
и произведём вызов в программе набрав:
call 576935
подстановка сервера VoIP (домена) производится автоматически, хотя можно и полностью набрать SIP адрес.
В итоге получим:

Ну а далее пока для образа 3_40 (на 3_41 пока не смог заставить корректно работать):
Для запуска и управления Linphonec в режиме демона, используется утилита Linphonecsh. Первоначально при запуске необходима инициализация клиента linphonecsh -init. При выполнении этой команды происходит запуск консольного клиента, без загрузки конфигурационного файла.
Чтобы при запуске выполнялось чтение конфигурации, возможность видеозвонка и автоподъема запустим с флагами - с - V -a:
/home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonecsh init -c /home/pi/.linphonerc -V -a

Сейчас можем управлять консольным клиентом из терминала и MajorDoMo.
Команда на запуск видеозвонка из терминала:
/home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonecsh dial XXXXX
Команда для запуска видеозвонка из консоли MajorDoMo (в строке ответа видно ответ от демона линфона)

Также устанавливается соединение с автоответом с показом видео, набрав с мобильного приложения номер своего консольного клиента.
Единственное отмечу - есть некоторая задержка, 3-10 секунд от начала набора до установления видеозвонка, скорее всего связанная с транскодингом.
В планах - опробование других операторов, клиентов, настройка своего ссервера для работы из-за пределов своей домашней сети.

Discuss (4) (7)

See also:
2019-09-11 Создание голосового оповещения MajorDoMo
2019-08-21 Установка USB аудиокарты и настройка звука в Raspberry Pi
2019-04-04 Сертификация в Z-Wave
2019-03-11 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
2019-02-04 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
2018-12-23 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
2018-10-20 Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo
2018-08-14 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
2018-07-08 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
2018-06-29 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
2018-06-21 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

Минск, Беларусь

На форуме: udvnl