Files
OBS-WebKitGTK/README.md
2026-07-18 08:18:50 +05:00

54 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OBS WebKit Browser Source (без CEF)
Нативный input source для OBS Studio на Alpine Linux. Страницы рендерит системный
WebKitGTK 4.1 в отдельном процессе на приватном Xvfb-дисплее; Chromium/CEF в проекте
нет. Кадры передаются в OBS напрямую как BGRA, без FFmpeg и захвата рабочего стола.
Поддерживается:
- HTTP/HTTPS, `data:` URL и локальные HTML-файлы;
- прозрачный фон с alpha-каналом;
- пользовательский CSS;
- размер 28192 px и 160 FPS;
- аппаратный WebKit compositor через DRM/DMA-BUF (Mesa `radeonsi` на AMD),
при этом Xvfb используется только как изолированный невидимый дисплей;
- прямой XShm-захват итогового кадра Xvfb для непрозрачных страниц и
XComposite/XShm-захват с alpha для прозрачных;
- shared-memory транспорт кадров без многомегабайтной записи в pipe;
- мышь, прокрутка, фокус и базовый ввод с клавиатуры через окно Interact OBS;
- перезагрузка страницы и остановка renderer-процесса у скрытого source.
Звук страницы намеренно выключен: добавьте в OBS отдельный Application Audio Capture.
Renderer всегда использует отдельный приватный Xvfb-дисплей и не создаёт окон на
рабочем столе. WebKit принудительно включает аппаратный compositor и выбирает доступный
DRM render node; для него нужен доступ к `/dev/dri/renderD*`.
Для тяжёлого полноэкранного `filter: blur()` всё ещё разумно выбирать реальный размер
виджета вместо рендера 4K/1080p с последующим уменьшением в сцене. Пользовательские
`will-change` и compositor hints сохраняются, но renderer не внедряет их в страницу сам:
WebKit сам распределяет элементы по GPU-слоям.
Это рабочий backend, а не замена всех расширенных возможностей штатного obs-browser
(DevTools, cookies API, browser docks и DRM здесь пока отсутствуют).
## Сборка на Alpine
```sh
chmod +x scripts/install-deps-alpine.sh
./scripts/install-deps-alpine.sh
/usr/bin/cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
/usr/bin/cmake --build build
ctest --test-dir build --output-on-failure
doas /usr/bin/cmake --install build --prefix /usr
```
После установки перезапустите OBS и добавьте источник **Браузер WebKit (без CEF)**.
Если OBS установлен в нестандартный prefix, задайте при конфигурации
`OBS_PLUGIN_DIR` и `OBS_PLUGIN_DATA_DIR`.
## Почему WebKitGTK, а не WPE
WPE архитектурно подходит лучше всего, но пакет `wpewebkit` отсутствует в актуальном
Alpine edge/3.24 (остались только `libwpe` и backend). WebKitGTK 4.1 есть в текущем
репозитории Alpine, использует тот же WebKit и не зависит от CEF. Renderer изолирован
от OBS, поэтому падение Web-процесса не должно уронить студию.