Voogesitage ekraani mitmesse seadmesse võrgu kaudu

Voogesitage ekraani mitmesse seadmesse võrgu kaudu

Mul oli vajadus kuvada kontoris mitmel ekraanil armatuurlaud koos monitooringuga. Seal on mitu vana Raspberry Pi Model B+ ja peaaegu piiramatu hulga ressurssidega hüperviisor.

Ilmselt ei ole Raspberry Pi Model B+-l piisavalt juhuslikkust, et brauserit pidevalt töös hoida ja seal palju graafikat renderdada, mistõttu juhtub, et leht on osaliselt lollakas ja jookseb sageli kokku.

Seal oli üsna lihtne ja elegantne lahendus, mida ma tahan teiega jagada.

Nagu teate, on kõigil Vaarikatel üsna võimas videoprotsessor, mis sobib suurepäraselt riistvaralise video dekodeerimiseks. Nii tekkiski mõte käivitada kuskil mujal armatuurlauaga brauser ja vaarikale üle kanda renderdatud pildiga valmis voog.

Lisaks peaks sellel olema lihtsustatud haldamine, kuna sel juhul tehakse kogu konfiguratsioon ühes virtuaalmasinas, mida on lihtsam värskendada ja varundada.

Pole varem öeldud kui tehtud.

Serveri osa

Kasutame valmis Pilvepilt Ubuntu jaoks. See ei nõua installimist, sisaldab kõike, mida vajate virtuaalse masina kiireks juurutamiseks ja CloudIniti tugi aitab koheselt võrgu seadistada, ssh-võtmeid lisada ja kiiresti tööle panna.

Juurutame uue virtuaalmasina ja installime selle esmalt sinna Xorg, nom и räbustikkast:

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

Me kasutame lahkelt ka Xorgi konfiguratsiooni antud meile Diego Ongaro, lisades ainult uue eraldusvõime 1920 × 1080, kuna kõik meie monitorid kasutavad seda:

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

Nüüd installime Firefoxi, käivitame selle süsteemiteenusena, nii et ühe asjana kirjutame selle jaoks ühikfaili:

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

Firefoxi viivitamatuks täisekraanrežiimis käivitamiseks vajame Xdotooli.
Parameetri kasutamine -url saate määrata mis tahes lehe nii, et see avaneks brauseri käivitamisel automaatselt.

Selles etapis on meie kiosk valmis, kuid nüüd peame eksportima pildi üle võrgu teistele monitoridele ja seadmetele. Selleks kasutame võimalusi Liikumine JPEG, vorming, mida kasutatakse sagedamini video voogesitamiseks enamikust veebikaameratest.

Selleks vajame kahte asja: FFmpeg koos mooduliga x11 haarata, piltide jäädvustamiseks X-dest ja streamEye, mis levitab seda meie klientidele:

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

Kuna meie pilt ei vaja kiiret värskendamist, määrasin värskendussageduse: 1 kaader sekundis (parameeter -r 1) ja tihenduskvaliteet: 5 (parameeter -q:v 5)

Nüüd proovime minna http://your-vm:8080/, näete vastuseks pidevalt uuendatavat ekraanipilti töölauast. Suurepärane! — mida vaja oli.

Kliendi pool

Siin on ikka lihtsam, nagu ma ütlesin, kasutame Raspberry Pi Model B+.

Kõigepealt installime selle Arch Linuxi ARM, järgime seda juhiseid ametlikul veebilehel.

Samuti peame oma videokiibile eraldama rohkem mälu, selleks me redigeerime /boot/config.txt

gpu_mem=128

Käivitame oma uue süsteemi ja ärge unustage pacmani võtmehoidjat lähtestada, installida OMXPlayer:

pacman -Sy omxplayer

Tähelepanuväärne on see, et OMXPlayer saab töötada ka ilma x-ita, seega on meil vaja ainult kirjutada selle jaoks ühikfail ja käivitada:

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

Parameetrina -b http://your-vm:8080/ edastame URL-i oma serverist.

See on kõik, ühendatud ekraanile peaks kohe ilmuma pilt meie serverist. Probleemide korral taaskäivitatakse voog automaatselt ja kliendid loovad sellega uuesti ühenduse.

Boonusena saate tekkiva pildi installida ekraanisäästjana kõikidesse kontori arvutitesse. Selleks vajate MPV и XScreenSaver:

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

Nüüd on teie kolleegid väga õnnelikud 🙂

Allikas: www.habr.com

Lisa kommentaar