สตรีมหน้าจอไปยังอุปกรณ์หลายเครื่องผ่านเครือข่าย

สตรีมหน้าจอไปยังอุปกรณ์หลายเครื่องผ่านเครือข่าย

ฉันจำเป็นต้องแสดงแดชบอร์ดพร้อมการตรวจสอบหลายหน้าจอในสำนักงาน มี Raspberry Pi Model B + รุ่นเก่าหลายตัวและไฮเปอร์ไวเซอร์ที่มีทรัพยากรเกือบไม่จำกัดจำนวน

เห็นได้ชัดว่า Raspberry Pi Model B+ ไม่มีการสุ่มเพียงพอที่จะทำให้เบราว์เซอร์ทำงานอย่างต่อเนื่องและแสดงผลกราฟิกจำนวนมากในนั้น เนื่องจากสิ่งนี้เกิดขึ้นที่หน้าบางส่วนมีบั๊กและมักจะหยุดทำงาน

มีวิธีแก้ปัญหาที่ค่อนข้างเรียบง่ายและสวยงาม ซึ่งฉันต้องการแบ่งปันกับคุณ

อย่างที่คุณทราบ ราสเบอร์รี่ทั้งหมดมีตัวประมวลผลวิดีโอที่ทรงพลังพอสมควร ซึ่งเหมาะสำหรับการถอดรหัสวิดีโอด้วยฮาร์ดแวร์ ดังนั้นจึงเกิดแนวคิดที่จะเปิดตัวเบราว์เซอร์ที่มีแดชบอร์ดที่อื่น และถ่ายโอนสตรีมสำเร็จรูปพร้อมรูปภาพที่เรนเดอร์ไปยังราสเบอร์รี่

นอกจากนี้ ควรทำให้การจัดการง่ายขึ้น เนื่องจากในกรณีนี้ การกำหนดค่าทั้งหมดจะดำเนินการในเครื่องเสมือนเครื่องเดียว ซึ่งง่ายต่อการอัปเดตและสำรองข้อมูล

ไม่พูดเร็วกว่าทำ

ส่วนเซิร์ฟเวอร์

เราใช้พร้อม คลาวด์อิมเมจสำหรับอูบุนตู. ไม่ต้องติดตั้ง แต่มีทุกสิ่งที่คุณต้องการในการปรับใช้เครื่องเสมือนอย่างรวดเร็วและ รองรับ CloudInit ช่วยให้ตั้งค่าเครือข่ายได้ทันที เพิ่มคีย์ ssh และนำไปใช้งานได้อย่างรวดเร็ว

เราปรับใช้เครื่องเสมือนใหม่และก่อนอื่นติดตั้งบนเครื่อง Xorg, พยักหน้า и ฟลักซ์บ็อกซ์:

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

เราจะใช้การกำหนดค่าสำหรับ Xorg ด้วย ได้รับ เรา Diego Ongaro เพิ่มความละเอียดใหม่เท่านั้น 1920 × 1080เนื่องจากจอภาพทั้งหมดของเราจะใช้งาน:

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

ตอนนี้เราจะติดตั้ง Firefox เราจะเรียกใช้เป็นบริการระบบ ดังนั้นเราจะเขียนไฟล์หน่วยสำหรับสิ่งหนึ่ง:

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 เพื่อเรียกใช้ Firefox ทันทีในโหมดเต็มหน้าจอ
การใช้พารามิเตอร์ -url คุณสามารถระบุหน้าใดก็ได้เพื่อให้เปิดโดยอัตโนมัติเมื่อเบราว์เซอร์เริ่มทำงาน

ในขั้นตอนนี้ คีออสก์ของเราพร้อมแล้ว แต่ตอนนี้เราต้องส่งออกรูปภาพผ่านเครือข่ายไปยังจอภาพและอุปกรณ์อื่นๆ ในการทำเช่นนี้เราจะใช้ความเป็นไปได้ ภาพเคลื่อนไหว JPEGซึ่งเป็นรูปแบบที่ใช้กันทั่วไปสำหรับการสตรีมวิดีโอจากเว็บแคมส่วนใหญ่

สำหรับสิ่งนี้เราต้องการสองสิ่ง: FFmpeg ด้วยโมดูล x11คว้าสำหรับจับภาพจาก x และ สตรีมอายซึ่งจะแจกจ่ายให้กับลูกค้าของเรา:

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 +

ก่อนอื่นมาติดตั้งกันก่อน ArchLinux 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/ เรากำลังส่ง url จากเซิร์ฟเวอร์ของเรา

เพียงเท่านี้รูปภาพจากเซิร์ฟเวอร์ของเราควรปรากฏบนหน้าจอที่เชื่อมต่อทันที ในกรณีที่เกิดปัญหาใดๆ สตรีมจะเริ่มต้นใหม่โดยอัตโนมัติและไคลเอ็นต์จะเชื่อมต่อกับสตรีมอีกครั้ง

เป็นโบนัส คุณสามารถติดตั้งภาพที่ได้เป็นภาพพักหน้าจอบนคอมพิวเตอร์ทุกเครื่องในสำนักงาน สำหรับสิ่งนี้คุณจะต้อง 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

ตอนนี้เพื่อนร่วมงานของคุณจะมีความสุขมาก 🙂

ที่มา: will.com

เพิ่มความคิดเห็น