Stream skerm nei meardere apparaten oer it netwurk

Stream skerm nei meardere apparaten oer it netwurk

Ik hie in need om in dashboard mei tafersjoch op ferskate skermen yn it kantoar te werjaan. D'r binne ferskate âlde Raspberry Pi Model B + en in hypervisor mei in hast ûnbeheinde hoemannichte boarnen.

Blykber hat de Raspberry Pi Model B+ net genôch willekeurich om de browser konstant te hâlden en in protte grafiken yn te meitsjen, wêrtroch it bart dat de side foar in part buggy is en faak crasht.

D'r wie in frij ienfâldige en elegante oplossing, dy't ik mei jo diele wol.

Lykas jo witte, hawwe alle Raspberries in frij krêftige fideoprosessor, dy't geweldich is foar hardwarefideo-dekodearring. Dat it idee kaam op om in browser mei in dashboard earne oars te lansearjen, en in ready-made stream mei in werjûn ôfbylding oer te bringen nei de raspberry.

Plus, dit moat it behear ferienfâldige hawwe, om't yn dit gefal alle konfiguraasje wurdt útfierd op ien firtuele masine, dy't makliker is om te aktualisearjen en te backupjen.

Net earder sein as dien.

Server diel

Wy brûke klear Wolkôfbylding foar Ubuntu. Fereaskjen gjin ynstallaasje, it befettet alles wat jo nedich hawwe om fluch ynsette in firtuele masine, en CloudInit-stipe helpt om direkt in netwurk yn te stellen, ssh-kaaien ta te foegjen en it fluch yn gebrûk te nimmen.

Wy sette in nije firtuele masine yn en earst ynstallearje it derop Xorg, nodm и flux box:

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

Wy sille ek de konfiguraasje brûke foar Xorg, freonlik ferliend us Diego Ongaro, it tafoegjen fan mar in nije resolúsje 1920 × 1080, om't al ús monitors it sille brûke:

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

No sille wy Firefox ynstallearje, wy sille it útfiere as in systeemtsjinst, dus foar ien ding sille wy der in ienheidsbestân foar skriuwe:

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

Wy hawwe Xdotool nedich om firefox direkt yn folslein skermmodus út te fieren.
It brûken fan parameter -url jo kinne elke side oantsjutte sadat dizze automatysk iepenet as de browser begjint.

Op dit stadium is ús kiosk klear, mar no moatte wy de ôfbylding oer it netwurk eksportearje nei oare monitors en apparaten. Om dit te dwaan, sille wy de mooglikheden brûke Beweging JPEG, in formaat dat faker brûkt wurdt foar it streamen fan fideo fan de measte webcams.

Dêrfoar hawwe wy twa dingen nedich: FFmpeg mei module x11 ryk, foar it meitsjen fan foto's fan x's en streamEye, dy't it sil fersprieden oan ús kliïnten:

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

Om't ús ôfbylding gjin rappe fernijing fereasket, spesifisearre ik de ferfarskingsfrekwinsje: 1 frame per sekonde (parameter -r 1) en kompresje kwaliteit: 5 (parameter -q:v 5)

Litte wy no besykje te gean nei http://your-vm:8080/, As antwurd sille jo in konstant bywurke skermôfbylding fan it buroblêd sjen. Grut! - wat wie nedich.

Client kant

It is hjir noch makliker, lykas ik sei, wy sille de Raspberry Pi Model B + brûke.

Lit ús earst it ynstallearje Bôge Linux ARM, dêrfoar folgje wy ynstruksjes op 'e offisjele side.

Wy sille ek mear ûnthâld moatte tawize foar ús fideochip, hjirfoar sille wy bewurkje /boot/config.txt

gpu_mem=128

Litte wy ús nije systeem opstarte en ferjit net de pacman-sleutelring te initialisearjen, ynstallearje OMXPlayer:

pacman -Sy omxplayer

Opfallend is dat OMXPlayer kin wurkje sûnder x, dus alles wat wy nedich binne is in ienheidsbestân foar te skriuwen en útfiere:

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

As parameter -b http://your-vm:8080/ wy jouwe de url troch fan ús server.

Dat is alles, in foto fan ús server moat fuortendaliks ferskine op it ferbûne skerm. Yn gefal fan problemen sil de stream automatysk opnij starte en kliïnten sille der opnij mei ferbine.

As bonus kinne jo de resultearjende ôfbylding ynstallearje as skermbefeiliging op alle kompjûters yn it kantoar. Hjirfoar sille jo nedich hawwe 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

No sille jo kollega's tige bliid wêze 🙂

Boarne: www.habr.com

Add a comment