Stream layar menyang macem-macem piranti liwat jaringan

Stream layar menyang macem-macem piranti liwat jaringan

Aku kudu nampilake dashboard kanthi ngawasi ing sawetara layar ing kantor. Ana sawetara Raspberry Pi Model B + lawas lan hypervisor karo jumlah meh Unlimited sumber.

Ketoke Raspberry Pi Model B + ora cukup randomness kanggo njaga browser terus-terusan mlaku lan Rendering akèh grafis ing, amarga iku kedaden sing kaca sebagian buggy lan asring tubrukan.

Ana solusi sing cukup prasaja lan elegan, sing aku pengin bareng karo sampeyan.

Kaya sing sampeyan ngerteni, kabeh Raspberry duwe prosesor video sing cukup kuat, sing apik kanggo dekoding video hardware. Dadi idea teka munggah kanggo mbukak browser karo dashboard nang endi wae liya, lan nransfer stream siap-digawe karo gambar render menyang raspberry.

Kajaba iku, iki kudu nyederhanakake manajemen, amarga ing kasus iki kabeh konfigurasi bakal ditindakake ing siji mesin virtual, sing luwih gampang nganyari lan nggawe serep.

Ora let suwe diomongke.

Bagian server

Kita nggunakake siap Gambar Cloud kanggo Ubuntu. Mbutuhake ora instalasi, ngemot kabeh sing perlu kanggo cepet masang mesin virtual, lan Dhukungan CloudInit mbantu nyiyapake jaringan kanthi cepet, nambah tombol ssh lan kanthi cepet bisa digunakake.

Kita masang mesin virtual anyar lan pisanan nginstal ing Xorg, nom ΠΈ kothak flux:

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

Kita uga bakal nggunakake config kanggo Xorg, kindly diwenehake us Diego Ongaro, nambah mung rΓ©solusi anyar 1920 Γ— 1080, amarga kabeh monitor kita bakal nggunakake:

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

Saiki kita bakal nginstal Firefox, kita bakal mbukak minangka layanan sistem, supaya siji bab kita bakal nulis file unit kanggo iku:

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

Kita butuh Xdotool supaya bisa langsung mbukak firefox ing mode layar wutuh.
Nggunakake parameter -url sampeyan bisa nemtokake kaca apa wae supaya mbukak kanthi otomatis nalika browser diwiwiti.

Ing tahap iki, kios kita wis siyap, nanging saiki kita kudu ngekspor gambar liwat jaringan menyang monitor lan piranti liyane. Kanggo nindakake iki, kita bakal nggunakake kemungkinan Gerak JPEG, format sing luwih umum digunakake kanggo streaming video saka umume webcam.

Kanggo iki, kita butuh rong perkara: FFmpeg karo modul x11 ungkep, kanggo njupuk gambar saka x lan streamEye, sing bakal disebarake menyang klien:

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

Amarga gambar kita ora mbutuhake nganyari cepet, aku nemtokake tingkat refresh: 1 pigura per detik (parameter -r 1) lan kualitas kompresi: 5 (parameter -q:v 5)

Saiki ayo nyoba menyang http://your-vm:8080/, kanggo nanggepi sampeyan bakal weruh gambar desktop sing terus dianyari. apik tenan! - apa sing dibutuhake.

sisih klien

Iki isih luwih gampang, kaya sing dakkandhakake, kita bakal nggunakake Raspberry Pi Model B +.

Kaping pisanan, ayo nginstal ARM Arch Linux, kanggo iki kita tindakake instruksi ing situs resmi.

Kita uga kudu nyedhiakke memori liyane kanggo chip video kita, kanggo iki kita bakal ngowahi ing /boot/config.txt

gpu_mem=128

Ayo boot sistem anyar kita lan aja lali miwiti pacman keyring, nginstal OMXPlayer:

pacman -Sy omxplayer

Apik banget, OMXPlayer bisa digunakake tanpa x, dadi mung kudu nulis file unit lan mbukak:

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

Minangka parameter -b http://your-vm:8080/ kita ngliwati url saka server kita.

Sing kabeh, gambar saka server kita kudu langsung katon ing layar sing disambungake. Yen ana masalah, stream kasebut bakal diwiwiti maneh kanthi otomatis lan klien bakal nyambung maneh.

Minangka bonus, sampeyan bisa nginstal gambar asil minangka screensaver ing kabeh komputer ing kantor. Kanggo iki sampeyan kudu 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

Saiki kolega sampeyan bakal seneng banget πŸ™‚

Source: www.habr.com

Add a comment