Stream Écran op verschidde Geräter iwwer dem Netz

Stream Écran op verschidde Geräter iwwer dem Netz

Ech hat e Besoin fir en Dashboard mat Iwwerwaachung op verschiddene Schiirme am Büro ze weisen. Et gi verschidde al Raspberry Pi Model B + an en Hypervisor mat enger bal onlimitéierter Quantitéit u Ressourcen.

Anscheinend huet de Raspberry Pi Model B+ net genuch Zoufällegkeet fir de Browser dauernd ze lafen a vill Grafiken dran ze maachen, wéinst deem geschitt et datt d'Säit deelweis buggy ass an dacks crasht.

Et gouf eng zimlech einfach an elegant Léisung, déi ech mat Iech deele wëll.

Wéi Dir wësst, hunn all Raspberries e zimlech mächtege Videoprozessor, dee super ass fir Hardware Video Decodéierung. Also ass d'Iddi komm fir e Browser mat engem Dashboard iergendwou anzwousch anescht ze starten, an e fäerdege Stream mat engem rendered Bild op den Himbeer ze transferéieren.

Plus, dëst sollt d'Gestioun vereinfacht hunn, well an dësem Fall all Konfiguratioun op enger virtueller Maschinn duerchgefouert gëtt, wat méi einfach ass ze aktualiséieren an ze backen.

Net méi séier gesot wéi gemaach.

Server Deel

Mir benotzen prett Cloud Image fir Ubuntu. Erfuerdert keng Installatioun, et enthält alles wat Dir braucht fir séier eng virtuell Maschinn z'installéieren, an CloudInit Ënnerstëtzung hëlleft direkt e Reseau opzestellen, ssh Schlësselen derbäi a séier a Betrib ze setzen.

Mir installéieren eng nei virtuell Maschinn an installéiere se als éischt drop Xorg, nodm и Fluxbox:

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

Mir wäerten och d'Konfiguratioun fir Xorg benotzen, frëndlech accordéiert us Diego Ongaro, dobäi nëmmen eng nei Resolutioun 1920 × 1080, well all eis Monitore et benotzen:

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

Elo wäerte mir Firefox installéieren, mir lafen et als Systemservice, also fir eng Saach schreiwen mir eng Eenheetsdatei dofir:

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

Mir brauchen Xdotool fir Firefox direkt am Vollbildmodus ze lafen.
Benotzt Parameter -url Dir kënnt all Säit uginn sou datt se automatesch opmaacht wann de Browser ufänkt.

Op dëser Etapp ass eise Kiosk fäerdeg, awer elo musse mir d'Bild iwwer de Netz op aner Monitore an Apparater exportéieren. Fir dëst ze maachen, wäerte mir d'Méiglechkeeten benotzen Bewegung JPEG, e Format méi allgemeng benotzt fir Video vun de meeschte Webcams ze streamen.

Dofir brauche mir zwou Saachen: FFmpeg mat Modul x11 vun, fir Biller vun x'en an streamEye, déi et un eise Clienten verdeelt:

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

Well eist Bild kee séieren Update erfuerdert, hunn ech den Erfrëschungsrate uginn: 1 Frame pro Sekonn (Parameter -r 1) a Kompressiounsqualitéit: 5 (Parameter -q:v 5)

Loosst eis elo probéieren ze goen http://your-vm:8080/, als Äntwert gesitt Dir e konstant aktualiséiert Screenshot vum Desktop. Super! - wat gebraucht gouf.

Client Säit

Et ass nach ëmmer méi einfach hei, wéi gesot, mir benotze de Raspberry Pi Model B +.

Als éischt, loosst eis et installéieren ArchLinux ARM, dofir verfollege mir Instruktiounen op den offiziellen Site.

Mir mussen och méi Erënnerung fir eise Video Chip allocéieren, dofir wäerte mir änneren /boot/config.txt

gpu_mem=128

Loosst eis eisen neie System booten an vergiesst net de Pacman Keyring initialiséieren, installéieren OMXPlayer:

pacman -Sy omxplayer

Bemierkenswäert, OMXPlayer kann ouni x funktionnéieren, also alles wat mir brauchen ass eng Eenheetsdatei dofir ze schreiwen a lafen:

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

Als Parameter -b http://your-vm:8080/ mir ginn d'URL vun eisem Server weider.

Dat ass alles, e Bild vun eisem Server soll direkt um verbonne Bildschierm erscheinen. Am Fall vu Probleemer gëtt de Stream automatesch nei gestart an d'Clientë konnektéieren erëm domat.

Als Bonus kënnt Dir dat entstinn Bild als Screensaver op all Computer am Büro installéieren. Fir dëst wäert Dir braucht 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

Elo sinn Är Kollegen ganz frou 🙂

Source: will.com

Setzt e Commentaire