Стримујте екран на више уређаја преко мреже

Стримујте екран на више уређаја преко мреже

Имао сам потребу да прикажем контролну таблу са надзором на неколико екрана у канцеларији. Постоји неколико старих Распберри Пи Модел Б+ и хипервизор са скоро неограниченом количином ресурса.

Очигледно Распберри Пи Модел Б+ нема довољно насумице да би прегледач стално радио и у њему приказивао много графике, због чега се дешава да страница делимично греши и често пада.

Постојало је прилично једноставно и елегантно решење, које желим да поделим са вама.

Као што знате, све малине имају прилично моћан видео процесор, који је одличан за хардверско декодирање видеа. Тако се појавила идеја да покренемо претраживач са контролном таблом негде другде, а готов стреам са рендерованом сликом пренесемо на малину.

Осим тога, ово би требало да поједностави управљање, јер ће се у овом случају сва конфигурација обављати на једној виртуелној машини, коју је лакше ажурирати и направити резервну копију.

Не пре речено него учињено.

Серверски део

Користимо спремно Слика у облаку за Убунту. Не захтева инсталацију, садржи све што вам је потребно за брзо постављање виртуелне машине и ЦлоудИнит подршка помаже у тренутном постављању мреже, додавању ссх кључева и брзом пуштању у рад.

Ми постављамо нову виртуелну машину и пре свега је инсталирамо на њу Ксорг, нодм и флукбок:

apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm

Такође ћемо користити конфигурацију за Ксорг, љубазно одобрено нас Дијего Онгаро, додајући само нову резолуцију 1920 × 1080, пошто ће га користити сви наши монитори:

cat > /etc/X11/xorg.conf <<EOT
Section "Device"
    Identifier      "device"
    Driver          "vesa"
EndSection

Section "Screen"
    Identifier      "screen"
    Device          "device"
    Monitor         "monitor"
    DefaultDepth    16
    SubSection "Display"
        Modes       "1920x1080" "1280x1024" "1024x768" "800x600"
    EndSubSection
EndSection

Section "Monitor"
    Identifier      "monitor"
    HorizSync       20.0 - 50.0
    VertRefresh     40.0 - 80.0
    Option          "DPMS"
EndSection

Section "ServerLayout"
    Identifier      "layout"
    Screen          "screen"
EndSection
EOT

systemctl restart nodm

Сада ћемо инсталирати Фирефок, покренућемо га као системску услугу, тако да ћемо прво написати јединичну датотеку за њега:

apt-get install -y firefox xdotool

cat > /etc/systemd/system/firefox.service <<EOT
[Unit]
Description=Firefox
After=network.target

[Service]
Restart=always
User=ubuntu
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
ExecStart=/usr/bin/firefox -url 'http://example.org/mydashboard'
ExecStartPost=/usr/bin/xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11

[Install]
WantedBy=graphical.target
EOT

systemctl enable firefox
systemctl start firefox

Потребан нам је Ксдотоол да бисмо одмах покренули фирефок у режиму целог екрана.
Користећи параметар -url можете одредити било коју страницу тако да се аутоматски отвара када се претраживач покрене.

У овој фази, наш киоск је спреман, али сада треба да експортујемо слику преко мреже на друге мониторе и уређаје. Да бисмо то урадили, користићемо могућности Мотион ЈПЕГ, формат који се чешће користи за стримовање видео записа са већине веб камера.

За ово су нам потребне две ствари: ФФмпег са модулом к11граб, за снимање слика са к и стреамЕие, који ће га дистрибуирати нашим клијентима:

apt-get install -y make gcc ffmpeg 

cd /tmp/
wget https://github.com/ccrisan/streameye/archive/master.tar.gz
tar xvf master.tar.gz 
cd streameye-master/
make
make install

cat > /etc/systemd/system/streameye.service <<EOT
[Unit]
Description=streamEye
After=network.target

[Service]
Restart=always
User=ubuntu
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
ExecStart=/bin/sh -c 'ffmpeg -f x11grab -s 1920x1080 -i :0 -r 1 -f mjpeg -q:v 5 - 2>/dev/null | streameye'

[Install]
WantedBy=graphical.target
EOT

systemctl enable streameye
systemctl start streameye

Пошто наша слика не захтева брзо ажурирање, навео сам брзину освежавања: 1 кадар у секунди (параметар -r 1) и квалитет компресије: 5 (параметар -q:v 5)

Покушајмо сада да пређемо на http://your-vm:8080/, као одговор видећете стално ажурирани снимак екрана радне површине. Велики! — шта је требало.

На страни клијента

Овде је још лакше, као што сам рекао, користићемо Распберри Пи Модел Б +.

Пре свега, хајде да га инсталирамо Арцх Линук АРМ, за ово пратимо инструкције на званичној страници.

Такође ћемо морати да издвојимо више меморије за наш видео чип, за ово ћемо уређивати /boot/config.txt

gpu_mem=128

Хајде да покренемо наш нови систем и не заборавимо да иницијализујемо пацман привезак за кључеве, инсталирамо ОМКСПлаиер:

pacman -Sy omxplayer

Занимљиво је да ОМКСПлаиер може да ради без к, тако да све што нам треба је да напишемо јединичну датотеку за њега и покренемо:

cat > /etc/systemd/system/omxplayer.service <<EOT
[Unit]
Description=OMXPlayer
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/omxplayer -r --live -b http://your-vm:8080/ --aspect-mode full

[Install]
WantedBy=multi-user.target
EOT

systemctl enable omxplayer
systemctl start omxplayer

Као параметар -b http://your-vm:8080/ прослеђујемо УРЛ са нашег сервера.

То је све, слика са нашег сервера треба одмах да се појави на повезаном екрану. У случају било каквих проблема, стрим ће се аутоматски поново покренути и клијенти ће се поново повезати на њега.

Као бонус, добијену слику можете инсталирати као чувар екрана на свим рачунарима у канцеларији. За ово ће вам требати МПВ и КССцреенСавер:

mode:  one
selected: 0
programs:              
     "Monitoring Screen"  mpv --really-quiet --no-audio --fs       
      --loop=inf --no-stop-screensaver       
      --wid=$XSCREENSAVER_WINDOW        
      http://your-vm:8080/      n
    maze -root        n
    electricsheep --root 1       n

Сада ће ваше колеге бити веома срећне 🙂

Извор: ввв.хабр.цом

Додај коментар