I-stream ang screen sa maraming device sa network

I-stream ang screen sa maraming device sa network

Kailangan kong magpakita ng dashboard na may pagsubaybay sa ilang mga screen sa opisina. Mayroong ilang lumang Raspberry Pi Model B + at isang hypervisor na may halos walang limitasyong dami ng mga mapagkukunan.

Tila ang Raspberry Pi Model B+ ay walang sapat na randomness upang panatilihing patuloy na tumatakbo ang browser at nag-render ng maraming graphics dito, dahil kung saan nangyayari na ang page ay bahagyang buggy at madalas na nag-crash.

Nagkaroon ng medyo simple at eleganteng solusyon, na gusto kong ibahagi sa iyo.

Tulad ng alam mo, ang lahat ng mga Raspberry ay may medyo malakas na processor ng video, na mahusay para sa pag-decode ng video ng hardware. Kaya ang ideya ay dumating upang ilunsad ang isang browser na may dashboard sa ibang lugar, at ilipat ang isang handa na stream na may isang nai-render na larawan sa raspberry.

Dagdag pa, dapat itong pinasimple na pamamahala, dahil sa kasong ito ang lahat ng pagsasaayos ay isasagawa sa isang virtual machine, na mas madaling i-update at i-backup.

Wala pang sinabi at tapos na.

Bahagi ng server

Ginagamit namin ang handa Cloud Image para sa Ubuntu. Hindi nangangailangan ng pag-install, naglalaman ito ng lahat ng kailangan mo upang mabilis na mag-deploy ng virtual machine, at Suporta sa CloudInit tumutulong na agad na mag-set up ng isang network, magdagdag ng mga ssh key at mabilis itong maisagawa.

Nag-deploy kami ng bagong virtual machine at una sa lahat, i-install ito dito Xorg, nom ΠΈ kahon ng pagkilos ng bagay:

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

Gagamitin din namin ang config para sa Xorg, mabait ipinagkaloob sa amin ni Diego Ongaro, nagdagdag lamang ng bagong resolusyon 1920 Γ— 1080, dahil gagamitin ito ng lahat ng aming monitor:

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

Ngayon ay i-install namin ang Firefox, patakbuhin namin ito bilang isang serbisyo ng system, kaya para sa isang bagay ay magsusulat kami ng isang file ng yunit para dito:

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

Kailangan namin ng Xdotool upang mapatakbo kaagad ang firefox sa full screen mode.
Gamit ang parameter -url maaari mong tukuyin ang anumang pahina upang awtomatiko itong magbubukas kapag nagsimula ang browser.

Sa yugtong ito, handa na ang aming kiosk, ngunit ngayon ay kailangan naming i-export ang larawan sa network sa iba pang mga monitor at device. Upang gawin ito, gagamitin namin ang mga posibilidad Paggalaw JPEG, isang format na mas karaniwang ginagamit para sa streaming ng video mula sa karamihan ng mga webcam.

Para dito kailangan namin ng dalawang bagay: FFmpeg may modyul x11grab, para sa pagkuha ng mga larawan mula sa mga x at streamEye, na ipapamahagi ito sa aming mga kliyente:

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

Dahil ang aming larawan ay hindi nangangailangan ng mabilis na pag-update, tinukoy ko ang rate ng pag-refresh: 1 frame bawat segundo (parameter -r 1) at kalidad ng compression: 5 (parameter -q:v 5)

Ngayon subukan nating pumunta sa http://your-vm:8080/, bilang tugon makakakita ka ng patuloy na ina-update na screenshot ng desktop. Malaki! - kung ano ang kailangan.

panig ng kliyente

Mas madali pa rin dito, gaya ng sinabi ko, gagamitin natin ang Raspberry Pi Model B +.

Una sa lahat, i-install natin ito ArchLinux ARM, para dito sinusunod namin tagubilin sa opisyal na website.

Kakailanganin din naming maglaan ng mas maraming memory para sa aming video chip, para dito kami mag-e-edit /boot/config.txt

gpu_mem=128

Let's boot our new system and don't forget to initialize the pacman keyring, install OMXPlayer:

pacman -Sy omxplayer

Kapansin-pansin, ang OMXPlayer ay maaaring gumana nang walang x, kaya ang kailangan lang namin ay magsulat ng isang unit file para dito at tumakbo:

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

Bilang isang parameter -b http://your-vm:8080/ ipinapasa namin ang url mula sa aming server.

Iyon lang, dapat na agad na lumabas ang isang larawan mula sa aming server sa nakakonektang screen. Sa kaso ng anumang mga problema, ang stream ay awtomatikong ire-restart at ang mga kliyente ay muling kumonekta dito.

Bilang isang bonus, maaari mong i-install ang resultang larawan bilang isang screensaver sa lahat ng mga computer sa opisina. Para dito kakailanganin mo 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

Ngayon ang iyong mga kasamahan ay magiging napakasaya πŸ™‚

Pinagmulan: www.habr.com

Magdagdag ng komento