4.6 KiB
OBS WebKit Browser Source (без CEF)
Нативный input source для OBS Studio на Alpine Linux. Страницы рендерит системный WebKitGTK 4.1 в отдельном процессе; Chromium/CEF и Xvfb в проекте нет. Renderer использует X11/XWayland-сессию OBS и держит WebView в полностью прозрачном неинтерактивном нативном окне. Нативная surface нужна WebKitGTK для импорта GPU DMA-BUF. Кадры передаются в OBS напрямую как BGRA, без FFmpeg и захвата рабочего стола.
Поддерживается:
- HTTP/HTTPS,
data:URL и локальные HTML-файлы; - прозрачный фон с alpha-каналом;
- пользовательский CSS;
- размер 2–8192 px и 1–60 FPS;
- аппаратный WebKit compositor через DRM/DMA-BUF (Mesa
radeonsiна AMD); - прямой XComposite/XShm-захват скомпозированного GPU-кадра с alpha;
- XDamage-пропуск чтения backing pixmap, пока содержимое страницы не меняется;
- shared-memory транспорт кадров без многомегабайтной записи в pipe;
- мышь, прокрутка, фокус и базовый ввод с клавиатуры через окно Interact OBS;
- перезагрузка страницы и остановка renderer-процесса у скрытого source.
- пользовательские web-панели в меню «Док-панели» OBS с сохранением URL в коллекции сцен, восстановлением после запуска и интерактивным вводом.
Звук страницы намеренно выключен: добавьте в OBS отдельный Application Audio Capture.
Renderer наследует X11/XWayland-дисплей OBS; его нативное окно имеет нулевую opacity,
пустую input shape и не появляется на рабочем столе. Дополнительный display server не
запускается. 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 и DRM здесь пока отсутствуют).
Сборка на Alpine
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.
Для панели откройте Док-панели → Пользовательские web-панели..., добавьте
название и URL и нажмите Применить. Панель можно скрывать и показывать через
обычное меню доков OBS; правый клик по странице открывает команду перезагрузки.
Если 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-процесса не должно уронить студию.