Stream skærmen til flere enheder over netværket

Stream skærmen til flere enheder over netværket

Jeg havde et behov for at vise et dashboard med overvågning på flere skærme på kontoret. Der er flere gamle Raspberry Pi Model B+ og en hypervisor med en næsten ubegrænset mængde ressourcer.

Tilsyneladende har Raspberry Pi Model B+ ikke nok tilfældighed til at holde browseren konstant kørende og gengive en masse grafik i den, hvorfor det sker, at siden er delvis buggy og ofte går ned.

Der var en ret simpel og elegant løsning, som jeg vil dele med jer.

Som du ved, har alle hindbær en ret kraftig videoprocessor, som er fantastisk til hardware videoafkodning. Så ideen kom op til at starte en browser med et dashboard et andet sted og overføre en færdig stream med et gengivet billede til hindbæret.

Plus, dette burde have forenklet administrationen, da al konfiguration i dette tilfælde vil blive udført på én virtuel maskine, som er lettere at opdatere og sikkerhedskopiere.

Ikke før sagt end gjort.

Server del

Vi bruger klar Cloud Image til Ubuntu. Kræver ingen installation, den indeholder alt hvad du behøver for hurtigt at implementere en virtuel maskine, og CloudInit support hjælper med øjeblikkeligt at sætte et netværk op, tilføje ssh-nøgler og hurtigt sætte det i drift.

Vi installerer en ny virtuel maskine og installerer den først og fremmest på den xorg, nodm и flux boks:

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

Vi vil også bruge konfigurationen til Xorg, venligst givet us Diego Ongaro, tilføjer kun en ny opløsning 1920 × 1080, da alle vores skærme vil bruge det:

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

Nu vil vi installere Firefox, vi vil køre det som en systemtjeneste, så for en ting vil vi skrive en enhedsfil til det:

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

Xdotool er nødvendigt for os for at køre firefox med det samme i fuldskærmstilstand.
Brug af parameteren -url du kan angive en hvilken som helst side, så den åbner automatisk, når browseren starter.

På dette tidspunkt er vores kiosk klar, men nu skal vi eksportere billedet over netværket til andre skærme og enheder. For at gøre dette vil vi bruge mulighederne Motion JPEG, et format mere almindeligt brugt til at streame video fra de fleste webcams.

Til dette har vi brug for to ting: FFmpeg med modul x11 grab, til at tage billeder fra X'er og streamEye, som vil distribuere det til vores kunder:

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

Da vores billede ikke kræver en hurtig opdatering, specificerede jeg opdateringshastigheden: 1 frame per sekund (parameter -r 1) og kompressionskvalitet: 5 (parameter -q:v 5)

Lad os nu prøve at gå til http://your-vm:8080/, som svar vil du se et konstant opdateret skærmbillede af skrivebordet. Store! - hvad der skulle til.

Kundedel

Det er stadig nemmere her, som sagt vil vi bruge Raspberry Pi Model B+.

Først og fremmest, lad os installere det ArchLinux ARM, hertil følger vi Kørselsvejledning på det officielle sted.

Vi bliver også nødt til at allokere mere hukommelse til vores videochip, til dette vil vi redigere /boot/config.txt

gpu_mem=128

Lad os starte vores nye system og glem ikke at initialisere pacman nøgleringen, installer OMXPlayer:

pacman -Sy omxplayer

Bemærkelsesværdigt nok kan OMXPlayer fungere uden x, så alt hvad vi behøver er at skrive en enhedsfil til det og køre:

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

Som parameter -b http://your-vm:8080/ vi sender url'en fra vores server.

Det er alt, et billede fra vores server skulle straks vises på den tilsluttede skærm. I tilfælde af problemer, genstartes streamen automatisk, og klienter vil genoprette forbindelse til den.

Som en bonus kan du installere det resulterende billede som en pauseskærm på alle computere på kontoret. Til dette skal du bruge 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

Nu bliver dine kolleger meget glade 🙂

Kilde: www.habr.com

Tilføj en kommentar