Suoratoista näyttö useille laitteille verkon kautta

Suoratoista näyttö useille laitteille verkon kautta

Minulla oli tarve näyttää kojelauta valvonnalla useilla toimiston näytöillä. On olemassa useita vanhoja Raspberry Pi Model B + -malleja ja hypervisori, jolla on lähes rajoittamaton määrä resursseja.

Ilmeisesti Raspberry Pi Model B+:ssa ei ole tarpeeksi satunnaisuutta pitämään selain jatkuvasti käynnissä ja hahmontamaan siinä paljon grafiikkaa, minkä vuoksi sivu on osittain buginen ja usein kaatuu.

Siellä oli melko yksinkertainen ja tyylikäs ratkaisu, jonka haluan jakaa kanssasi.

Kuten tiedät, kaikissa Raspberriesissa on melko tehokas videoprosessori, joka sopii erinomaisesti laitteistovideon dekoodaukseen. Niinpä syntyi idea käynnistää selain, jossa on kojelauta jossain muualla, ja siirtää vadelmaan valmis stream renderoidulla kuvalla.

Lisäksi tässä pitäisi olla yksinkertaistettu hallinta, koska tässä tapauksessa kaikki konfigurointi suoritetaan yhdellä virtuaalikoneella, joka on helpompi päivittää ja varmuuskopioida.

Ei ennemmin sanottu kuin tehty.

Palvelimen osa

Käytämme valmiina Pilvikuva Ubuntulle. Se ei vaadi asennusta, vaan sisältää kaiken mitä tarvitset virtuaalikoneen nopeaan käyttöönottoon ja CloudInit-tuki auttaa välittömästi määrittämään verkon, lisäämään ssh-avaimia ja ottamaan sen nopeasti käyttöön.

Otamme käyttöön uuden virtuaalikoneen ja asennamme sen ensin siihen xorg, nom и sulatelaatikko:

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

Käytämme ystävällisesti myös Xorgin konfiguraatiota myönnetty meille Diego Ongaro, lisäämällä vain uuden resoluution 1920 × 1080, koska kaikki näytömme käyttävät sitä:

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

Nyt asennamme Firefoxin, käytämme sitä järjestelmäpalveluna, joten ensinnäkin kirjoitamme sille yksikkötiedoston:

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

Tarvitsemme Xdotoolia voidaksemme suorittaa firefoxin välittömästi koko näytön tilassa.
Parametrin käyttäminen -url voit määrittää minkä tahansa sivun niin, että se avautuu automaattisesti selaimen käynnistyessä.

Tässä vaiheessa kioskimme on valmis, mutta nyt meidän on vietävä kuva verkon kautta muille monitoreille ja laitteille. Tätä varten käytämme mahdollisuuksia Motion JPEG, jota käytetään useammin videoiden suoratoistoon useimmista verkkokameroista.

Tätä varten tarvitsemme kaksi asiaa: FFmpeg moduulin kanssa x11 grab, kuvien ottamiseksi x:stä ja streamEye, joka jakaa sen asiakkaillemme:

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

Koska kuvamme ei vaadi nopeaa päivitystä, määritin virkistystaajuuden: 1 kuva sekunnissa (parametri -r 1) ja pakkauslaatu: 5 (parametri -q:v 5)

Yritetään nyt mennä http://your-vm:8080/, vastauksena näet jatkuvasti päivitettävän kuvakaappauksen työpöydästä. Loistava! - mitä tarvittiin.

Asiakkaan puolella

Täällä on silti helpompaa, kuten sanoin, käytämme Raspberry Pi Model B + -mallia.

Ensinnäkin, asennetaan se ArchLinux ARM, tätä seuraamme ohjeet virallisella verkkosivustolla.

Meidän on myös varattava enemmän muistia videosirullemme, tätä varten editoimme sisään /boot/config.txt

gpu_mem=128

Käynnistetään uusi järjestelmämme ja älä unohda alustaa pacman-avainrengasta, asenna OMXPlayer:

pacman -Sy omxplayer

On huomattava, että OMXPlayer voi toimia ilman x:ää, joten tarvitsemme vain kirjoittaa sille yksikkötiedoston ja suorittaa:

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

Parametrina -b http://your-vm:8080/ välitämme URL-osoitteen palvelimeltamme.

Siinä kaikki, palvelimeltamme tulevan kuvan pitäisi välittömästi ilmestyä yhdistetylle näytölle. Jos ongelmia ilmenee, suoratoisto käynnistetään automaattisesti uudelleen ja asiakkaat muodostavat yhteyden siihen uudelleen.

Bonuksena voit asentaa tuloksena olevan kuvan näytönsäästäjäksi kaikkiin toimiston tietokoneisiin. Tätä varten tarvitset 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

Nyt kollegasi ovat erittäin iloisia 🙂

Lähde: will.com

Lisää kommentti