پخش جریانی صفحه به چندین دستگاه از طریق شبکه

پخش جریانی صفحه به چندین دستگاه از طریق شبکه

من نیاز به نمایش یک داشبورد با نظارت بر روی چندین صفحه در دفتر داشتم. چندین Raspberry Pi مدل B + قدیمی و یک Hypervisor با مقدار تقریباً نامحدودی از منابع وجود دارد.

ظاهرا Raspberry Pi Model B+ تصادفی کافی برای نگه داشتن مرورگر را ندارد که دائماً در حال اجرا باشد و گرافیک های زیادی را در آن رندر کند، به همین دلیل این اتفاق می افتد که صفحه تا حدی باگ است و اغلب از کار می افتد.

یک راه حل نسبتا ساده و ظریف وجود داشت که می خواهم آن را با شما به اشتراک بگذارم.

همانطور که می دانید همه رزبری ها دارای یک پردازنده ویدئویی نسبتاً قدرتمند هستند که برای رمزگشایی ویدیوهای سخت افزاری عالی است. بنابراین این ایده مطرح شد که یک مرورگر با داشبورد را در جای دیگری راه اندازی کنیم و یک استریم آماده با یک تصویر رندر شده برای رزبری ارسال کنیم.

به علاوه، این باید مدیریت ساده‌تری داشته باشد، زیرا در این حالت تمام پیکربندی‌ها روی یک ماشین مجازی انجام می‌شود که به‌روزرسانی و پشتیبان‌گیری آسان‌تر است.

زودتر گفته شود.

بخش سرور

آماده استفاده می کنیم تصویر ابری برای اوبونتو. بدون نیاز به نصب، شامل همه چیزهایی است که برای استقرار سریع یک ماشین مجازی نیاز دارید و پشتیبانی از CloudInit کمک می کند تا فوراً یک شبکه را راه اندازی کنید، کلیدهای ssh را اضافه کنید و به سرعت آن را عملیاتی کنید.

ما یک ماشین مجازی جدید مستقر می کنیم و اول از همه آن را روی آن نصب می کنیم کورگ, نام и فلاکس باکس:

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

لطفاً از پیکربندی Xorg نیز استفاده خواهیم کرد اعطا شده ما دیگو اونگارو، تنها یک وضوح جدید اضافه می کند ۱۳۰۰ × ۶۰۰، زیرا همه مانیتورهای ما از آن استفاده می کنند:

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

حالا ما فایرفاکس را نصب می کنیم، آن را به عنوان یک سرویس سیستم اجرا می کنیم، بنابراین برای یک چیز یک فایل واحد برای آن می نویسیم:

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 نیاز داریم تا فایرفاکس را بلافاصله در حالت تمام صفحه اجرا کنیم.
با استفاده از پارامتر -url می توانید هر صفحه ای را مشخص کنید تا با شروع مرورگر به طور خودکار باز شود.

در این مرحله کیوسک ما آماده است، اما اکنون باید تصویر را از طریق شبکه به سایر مانیتورها و دستگاه ها صادر کنیم. برای این کار از امکانات استفاده خواهیم کرد حرکت JPEG، فرمتی است که بیشتر برای پخش ویدیو از اکثر وب کم ها استفاده می شود.

برای این کار به دو چیز نیاز داریم: FFmpeg به با ماژول x11 grab، برای گرفتن عکس از X و streamEye، که آن را بین مشتریان خود توزیع می کند:

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

از آنجایی که تصویر ما نیاز به به روز رسانی سریع ندارد، من نرخ تازه سازی را مشخص کردم: 1 فریم در ثانیه (پارامتر -r 1) و کیفیت فشرده سازی: 5 (پارامتر -q:v 5)

حالا بیایید سعی کنیم به http://your-vm:8080/، در پاسخ شما یک اسکرین شات از دسکتاپ به طور مداوم به روز می شود. عالی! - آنچه مورد نیاز بود

سمت مشتری

در اینجا هنوز راحت تر است، همانطور که گفتم، ما از Raspberry Pi Model B + استفاده خواهیم کرد.

اول از همه، بیایید آن را نصب کنیم آرچ لینوکس ARM، برای این ما دنبال می کنیم دستورالعمل در سایت رسمی

ما همچنین باید حافظه بیشتری را برای تراشه ویدیویی خود اختصاص دهیم، برای این کار در آن ویرایش خواهیم کرد /boot/config.txt

gpu_mem=128

بیایید سیستم جدید خود را بوت کنیم و فراموش نکنید که کلید Pacman را مقداردهی اولیه کنید، نصب کنید OMXPlayer:

pacman -Sy omxplayer

قابل توجه است، OMXPlayer می تواند بدون X کار کند، بنابراین تنها چیزی که نیاز داریم این است که یک فایل واحد برای آن بنویسیم و اجرا کنیم:

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

به عنوان یک پارامتر -b http://your-vm:8080/ ما آدرس را از سرور خود ارسال می کنیم.

این همه است، یک عکس از سرور ما باید بلافاصله در صفحه متصل ظاهر شود. در صورت بروز هرگونه مشکل، استریم به صورت خودکار راه اندازی مجدد می شود و کلاینت ها دوباره به آن متصل می شوند.

به عنوان یک امتیاز، می توانید تصویر حاصل را به عنوان محافظ صفحه روی همه رایانه های موجود در دفتر نصب کنید. برای این شما نیاز خواهید داشت 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

اکنون همکاران شما بسیار خوشحال خواهند شد 🙂

منبع: www.habr.com

اضافه کردن نظر