optimization

This commit is contained in:
2026-07-18 10:06:53 +05:00
parent 7d91df3c6b
commit 2c166a40e3
7 changed files with 108 additions and 121 deletions

View File

@@ -1,8 +1,11 @@
# OBS WebKit Browser Source (без CEF)
Нативный input source для OBS Studio на Alpine Linux. Страницы рендерит системный
WebKitGTK 4.1 в отдельном процессе на приватном Xvfb-дисплее; Chromium/CEF в проекте
нет. Кадры передаются в OBS напрямую как BGRA, без FFmpeg и захвата рабочего стола.
WebKitGTK 4.1 в отдельном процессе; Chromium/CEF и Xvfb в проекте нет. Renderer
использует X11/XWayland-сессию OBS и держит WebView в полностью прозрачном
неинтерактивном нативном окне. Нативная surface нужна WebKitGTK для импорта GPU
DMA-BUF. Кадры передаются в OBS напрямую как BGRA, без FFmpeg и захвата рабочего
стола.
Поддерживается:
@@ -10,18 +13,17 @@ WebKitGTK 4.1 в отдельном процессе на приватном Xvf
- прозрачный фон с alpha-каналом;
- пользовательский CSS;
- размер 28192 px и 160 FPS;
- аппаратный WebKit compositor через DRM/DMA-BUF (Mesa `radeonsi` на AMD),
при этом Xvfb используется только как изолированный невидимый дисплей;
- прямой XShm-захват итогового кадра Xvfb для непрозрачных страниц и
XComposite/XShm-захват с alpha для прозрачных;
- XDamage-пропуск чтения framebuffer, пока содержимое страницы не меняется;
- аппаратный WebKit compositor через DRM/DMA-BUF (Mesa `radeonsi` на AMD);
- прямой XComposite/XShm-захват скомпозированного GPU-кадра с alpha;
- XDamage-пропуск чтения backing pixmap, пока содержимое страницы не меняется;
- shared-memory транспорт кадров без многомегабайтной записи в pipe;
- мышь, прокрутка, фокус и базовый ввод с клавиатуры через окно Interact OBS;
- перезагрузка страницы и остановка renderer-процесса у скрытого source.
Звук страницы намеренно выключен: добавьте в OBS отдельный Application Audio Capture.
Renderer всегда использует отдельный приватный Xvfb-дисплей и не создаёт окон на
рабочем столе. WebKit принудительно включает аппаратный compositor и выбирает доступный
Renderer наследует X11/XWayland-дисплей OBS; его нативное окно имеет нулевую opacity,
пустую input shape и не появляется на рабочем столе. Дополнительный display server не
запускается. WebKit принудительно включает аппаратный compositor и выбирает доступный
DRM render node; для него нужен доступ к `/dev/dri/renderD*`.
Для тяжёлого полноэкранного `filter: blur()` всё ещё разумно выбирать реальный размер
виджета вместо рендера 4K/1080p с последующим уменьшением в сцене. Пользовательские