LINUX.ORG.RU

Скринкаст в локальной сети

 , ,


0

2

Задача - транслировать содержимое экрана по локальной сети с ноутбука на машину, к которой подключен проектор. Содержимое изображения - приложение с некоторой анимацией.

Первое что пробовал - VNC. Да, не совсем то, потому что мне не нужно удаленное управление, нужно только картинку выводить. Но это самое простое.

Имею - KRFB в качестве сервера, plasma-wayland сессия. В качестве клиента винда с RealVNC клиентом. Тормозит просто запредельно! При этом, раз в несколько минут KRFB просто вылетает. Работает ужасно!

После некоторых копаний, выяснил что с вейландом VNC работает просто никак (а говорили, что сетевая прозрачность X не нужна ибо есть VNC для вейланда). В plasma-X11 сессии с x11vnc работает лучше, но тоже очень плохо.

И! В голом openbox, без композитинга - наконец x11vnc работает нормально. Вообще неплохо, прям можно удаленно работать! Не может только в видео.

То есть, виной всему композитинг?? А есть какие-то решения, или какие-то подвижки, по VNC с wayland?

Далее, о скринкасту. Нашел, что есть OBS и оно делает как раз то что мне надо. Но - оно предлагает стримить на ютуб, телеграм или черт знает куда еще. А мне надо просто все локально.

А что с OBS можно использовать в качестве локального сервера, к которому можно было бы подключаться например VLC на другой машине в локалке? Какое самое простое решение?

★★★★

Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от t184256

То есть погоди, а почему тогда втирают что под вейландом безопасно, если вот программа тупо в обход него зазватывает картинку? Ничего не понимаю.

James_Holden ★★★★
() автор топика

У меня схожая ситуация, только на принимающей стороне - телевизор с андроидом. Wireless-display-gnome или как там его, дохленький какое-то и требует патченного нетворкманагера..

Городить какие-то костыли поверх upnp чота ваще не хочется..

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Нет, не захватывает даже с рут-правами.

$ sudo ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' /dev/null
ffmpeg version n5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
[kmsgrab @ 0x55ab1b64aa00] Using plane 65 to locate framebuffers.
[kmsgrab @ 0x55ab1b64aa00] Template framebuffer is 120: 2560x1440 format 30335241 modifier 200000018967b03 flags 2.
[kmsgrab @ 0x55ab1b64aa00] Framebuffer pixel format 30335241 is not a known supported format.
pipe:: Invalid argument
rootree
()
Ответ на: комментарий от James_Holden

Но - оно предлагает стримить на ютуб, телеграм или черт знает куда еще

Там есть возможность указать свой сервер.

А есть какой-то мануал как это использовать?

NewTek NDI — проприентарщина. На мой взгляд легче поднять локальный RTMP-сервер, как правильно сказал @eternal_sorrow.

rootree
()
Последнее исправление: rootree (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Попробуй, у некоторых людей это работает. Возможно зависит от видеокарты, но вот у человека из багтрекера kmsgrab не завёлся на Intel HD620, а у меня не заводится на AMD Radeon RX 6750XT (и на старом радеоне десятилетней давности тоже). Может быть это работает только на зелёных карточках, не знаю.

rootree
()
Последнее исправление: rootree (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Потому что в обход руту захватывать не запретишь. Стандартный непривилегированный захват в вейланде через pipewire безопасен, но я не помню, чтоб в него умел ffmpeg.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

VNC для анимаций тормозит концептуально.

Да, это понятно. Я про другое - оно вообще тормозит. Для статических окон даже. При этом из иксов без композитинга все четко.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от t184256

Без опций (которые взяты из официальной документации) тоже самое, гений.

$ sudo ffmpeg -f kmsgrab -i - /dev/null
ffmpeg version n5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
[kmsgrab @ 0x5643c736da00] Using plane 65 to locate framebuffers.
[kmsgrab @ 0x5643c736da00] Template framebuffer is 121: 2560x1440 format 30335241 modifier 200000018967b03 flags 2.
[kmsgrab @ 0x5643c736da00] Framebuffer pixel format 30335241 is not a known supported format.
pipe:: Invalid argument

Или может ещё предложишь убрать -f kmsgrab?

rootree
()
Последнее исправление: rootree (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Да я кучу опций в своё время перепробовал. Ничего не помогло. Вроде какая-то комбинация с -format_modifier мне позволила захватить какое-никакое изображение с экрана, но там была каша.

rootree
()
Ответ на: комментарий от t184256

Ну так пытался уже, выше с -format_modifier. Можешь, конечно, подсказать мне, вместо того, чтобы грубить. Будет плюсик в карму.

rootree
()
Последнее исправление: rootree (всего исправлений: 1)
Ответ на: комментарий от t184256

А разве kmsgrab не подразумевает перехват кадрового буфера видеокарты? В документации написано, что указание -f kmsgrab также неявно вызывает -device /dev/dri/card0. Пробовал дописывать -device /dev/dri/renderD128, ничего не менялось. Хотя оно и понятно, это синонимы.

Или есть какой-то ещё способ напрямую задействовать GPU? fbdev это только про tty.

rootree
()
Последнее исправление: rootree (всего исправлений: 2)
Ответ на: комментарий от rootree

Ты можешь сразу тут же забрать сырой фреймбуффер с GPU и колупаться с ними на CPU, а можешь каким-нибудь vaapi или что у тебя там прям там закодировать и достать уже закодированное. Чуйка мне подсказывает, что тогда возни с колорспейсами будет меньше.

t184256 ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Короче, попробовал это настроить - и получилось.

Выводится отлично, по сравнению с VNC, все плавненько, хоть видео ролики показывай.

Единственный недостаток - задержка секунд 20.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Задержка наверняка настраивается где то. Скорее всего в OBS. Это как бы для веб-стримов нормально. 20 секунд это даже маленькая задержка. Но возможно для твоей задачи её можно уменьшить.

eternal_sorrow ★★★★★
()