Strim skrin ke berbilang peranti melalui rangkaian

Strim skrin ke berbilang peranti melalui rangkaian

Saya mempunyai keperluan untuk memaparkan papan pemuka dengan pemantauan pada beberapa skrin di pejabat. Terdapat beberapa Raspberry Pi Model B + lama dan hypervisor dengan jumlah sumber yang hampir tidak terhad.

Nampaknya Raspberry Pi Model B+ tidak mempunyai cukup rawak untuk memastikan penyemak imbas sentiasa berjalan dan menghasilkan banyak grafik di dalamnya, yang menyebabkan halaman itu sebahagiannya buggy dan sering ranap.

Terdapat penyelesaian yang agak mudah dan elegan, yang saya ingin kongsikan dengan anda.

Seperti yang anda ketahui, semua Raspberi mempunyai pemproses video yang cukup berkuasa, yang bagus untuk penyahkodan video perkakasan. Maka tercetus idea untuk melancarkan penyemak imbas dengan papan pemuka di tempat lain, dan memindahkan strim siap sedia dengan gambar yang diberikan kepada raspberi.

Selain itu, ini sepatutnya memudahkan pengurusan, kerana dalam kes ini semua konfigurasi akan dilakukan pada satu mesin maya, yang lebih mudah untuk dikemas kini dan disandarkan.

Tidak lebih awal berkata daripada selesai.

Bahagian pelayan

Kami menggunakan sedia Imej Awan untuk Ubuntu. Tidak memerlukan pemasangan, ia mengandungi semua yang anda perlukan untuk menggunakan mesin maya dengan cepat, dan Sokongan CloudInit membantu menyediakan rangkaian serta-merta, menambah kekunci ssh dan menggunakannya dengan cepat.

Kami menggunakan mesin maya baharu dan pertama sekali memasangnya padanya Xorg, nodm ΠΈ 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, sila diberikan kami Diego Ongaro, hanya menambah resolusi baharu 1920 Γ— 1080, kerana 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 memasang Firefox, kami akan menjalankannya sebagai perkhidmatan sistem, jadi untuk satu perkara kami akan menulis fail 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 memerlukan Xdotool untuk menjalankan firefox serta-merta dalam mod skrin penuh.
Menggunakan parameter -url anda boleh menentukan mana-mana halaman supaya ia dibuka secara automatik apabila penyemak imbas bermula.

Pada peringkat ini, kiosk kami sudah sedia, tetapi kini kami perlu mengeksport imej melalui rangkaian ke monitor dan peranti lain. Untuk melakukan ini, kami akan menggunakan kemungkinan Gerakan JPEG, format yang lebih biasa digunakan untuk menstrim video daripada kebanyakan kamera web.

Untuk ini kita memerlukan dua perkara: FFmpeg dengan modul x11grab, untuk menangkap gambar dari x dan streamEye, yang akan mengedarkannya kepada pelanggan 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

Memandangkan gambar kami tidak memerlukan kemas kini pantas, saya menyatakan kadar penyegaran: 1 bingkai sesaat (parameter -r 1) dan kualiti mampatan: 5 (parameter -q:v 5)

Sekarang mari kita cuba pergi ke http://your-vm:8080/, sebagai tindak balas anda akan melihat tangkapan skrin yang sentiasa dikemas kini pada desktop. Hebat! - apa yang diperlukan.

Pihak pelanggan

Ia masih lebih mudah di sini, seperti yang saya katakan, kami akan menggunakan Raspberry Pi Model B +.

Pertama sekali, mari pasangkannya ARM Arch Linux, untuk ini kami ikuti Directions di laman web rasmi.

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

gpu_mem=128

Mari kita but sistem baru kami dan jangan lupa untuk memulakan pacman keyring, pasang OMXPlayer:

pacman -Sy omxplayer

Hebatnya, OMXPlayer boleh berfungsi tanpa x, jadi apa yang kita perlukan ialah menulis fail unit untuknya dan jalankan:

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 menghantar url dari pelayan kami.

Itu sahaja, gambar dari pelayan kami harus segera muncul pada skrin yang disambungkan. Sekiranya berlaku sebarang masalah, strim akan dimulakan semula secara automatik dan pelanggan akan menyambung semula kepadanya.

Sebagai bonus, anda boleh memasang gambar yang terhasil sebagai penyelamat skrin pada semua komputer di pejabat. Untuk ini anda perlukan MPV ΠΈ Penjimat XScreen:

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 rakan sekerja anda akan sangat gembira πŸ™‚

Sumber: www.habr.com

Tambah komen