Streaming layar ke beberapa perangkat melalui jaringan

Streaming layar ke beberapa perangkat melalui jaringan

Saya perlu menampilkan dasbor dengan pemantauan di beberapa layar di kantor. Ada beberapa Raspberry Pi Model B + lama dan hypervisor dengan sumber daya yang hampir tidak terbatas.

Rupanya Raspberry Pi Model B + tidak memiliki cukup keacakan untuk menjaga browser tetap berjalan dan merender banyak grafik di dalamnya, karena itu halaman sebagian bermasalah dan sering macet.

Ada solusi yang cukup sederhana dan elegan, yang ingin saya bagikan dengan Anda.

Seperti yang Anda ketahui, semua Raspberry memiliki prosesor video yang cukup kuat, yang bagus untuk decoding video perangkat keras. Jadi muncul ide untuk meluncurkan browser dengan dasbor di tempat lain, dan mentransfer aliran yang sudah jadi dengan gambar yang dirender ke raspberry.

Plus, ini harus menyederhanakan manajemen, karena dalam hal ini semua konfigurasi akan dilakukan pada satu mesin virtual, yang lebih mudah untuk diperbarui dan dicadangkan.

Tidak lebih cepat diucapkan daripada dilakukan.

bagian pelayan

Kami menggunakan siap Gambar Cloud untuk Ubuntu. Tidak memerlukan instalasi, ini berisi semua yang Anda butuhkan untuk menggunakan mesin virtual dengan cepat, dan dukungan CloudInit membantu mengatur jaringan secara instan, menambahkan kunci ssh dan dengan cepat mengoperasikannya.

Kami menggunakan mesin virtual baru dan pertama-tama menginstalnya Xorg, mengangguk ΠΈ kotak fluks:

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

Kami juga akan menggunakan konfigurasi untuk Xorg diberikan kami Diego Ongaro, hanya menambahkan resolusi baru 1920x1080, karena semua monitor kami akan menggunakannya:

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

Sekarang kami akan menginstal Firefox, kami akan menjalankannya sebagai layanan sistem, jadi untuk satu hal kami akan menulis file unit untuknya:

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

Kami membutuhkan Xdotool untuk segera menjalankan firefox dalam mode layar penuh.
Menggunakan parameter -url Anda dapat menentukan halaman mana saja agar terbuka secara otomatis saat browser dimulai.

Pada tahap ini, kios kami sudah siap, tetapi sekarang kami perlu mengekspor gambar melalui jaringan ke monitor dan perangkat lain. Untuk melakukan ini, kami akan menggunakan kemungkinan JPEG gerak, format yang lebih umum digunakan untuk streaming video dari sebagian besar webcam.

Untuk ini kita membutuhkan dua hal: FFmpeg dengan modul x11 ambil, untuk mengambil gambar dari x dan aliranMata, yang akan mendistribusikannya ke klien kami:

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

Karena gambar kita tidak memerlukan pembaruan cepat, saya menetapkan kecepatan penyegaran: 1 bingkai per detik (parameter -r 1) dan kualitas kompresi: 5 (parameter -q:v 5)

Sekarang mari kita coba pergi ke http://your-vm:8080/, sebagai tanggapan, Anda akan melihat tangkapan layar desktop yang terus diperbarui. Besar! - apa yang dibutuhkan.

Sisi klien

Di sini masih lebih mudah, seperti yang saya katakan, kita akan menggunakan Raspberry Pi Model B +.

Pertama-tama, mari kita instal ArchLinux ARM, untuk ini kami ikuti Instruksi di situs web resmi.

Kami juga perlu mengalokasikan lebih banyak memori untuk chip video kami, untuk ini kami akan mengeditnya /boot/config.txt

gpu_mem=128

Mari boot sistem baru kita dan jangan lupa menginisialisasi keyring pacman, instal Pemain OMX:

pacman -Sy omxplayer

Hebatnya, OMXPlayer dapat bekerja tanpa x, jadi yang kita perlukan hanyalah menulis file unit untuknya dan menjalankan:

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

Sebagai parameter -b http://your-vm:8080/ kami melewati url dari server kami.

Itu saja, gambar dari server kami akan segera muncul di layar yang terhubung. Jika ada masalah, streaming akan dimulai ulang secara otomatis dan klien akan menyambungkannya kembali.

Sebagai bonus, Anda dapat memasang gambar yang dihasilkan sebagai screensaver di semua komputer di kantor. Untuk ini, Anda perlu MPV ΠΈ XSscreenSaver:

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

Sekarang kolega Anda akan sangat senang πŸ™‚

Sumber: www.habr.com

Tambah komentar