2026-07-20 10:23:57 +05:00
2026-07-20 10:23:57 +05:00
2026-07-18 11:33:47 +05:00
2026-07-20 10:23:57 +05:00
2026-07-20 10:23:57 +05:00
2026-07-18 12:30:55 +05:00
2026-07-20 10:23:57 +05:00
2026-07-18 08:18:50 +05:00
2026-07-18 12:30:55 +05:00
2026-07-20 10:23:57 +05:00

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;
  • масштаб страницы 25500% с сохранением в настройках источника или web-панели;
  • размер 28192 px и 160 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 в коллекции сцен, восстановлением после запуска и интерактивным вводом.
  • единый постоянный WebKit-профиль для источников на сцене и web-панелей: общие cookies, HTTP cache, localStorage, IndexedDB, service workers и credentials; страницы одного origin взаимодействуют штатными storage-событиями и BroadcastChannel, как вкладки одного браузера.

Звук страницы намеренно выключен: добавьте в OBS отдельный Application Audio Capture. Все WebView одной сессии OBS работают в общем renderer-процессе и одном WebKitWebContext; маленькие процессы-посредники сохраняют прежнюю независимую жизнь каждого source/dock и изоляцию от OBS. Профиль хранится в стандартных каталогах данных и cache пользователя (obs-webkit-browser/profile) и переживает перезапуск OBS. 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.

Архив для публикации

После установки зависимостей используйте отдельные цели Makefile:

make build
make test
doas make install
make archive

make build собирает Release-версию, make test запускает тесты, doas make install устанавливает плагин в /usr, а make archive запускает сборку и тесты, после чего создаёт пакет без установки файлов в систему. Готовый архив obs-webkit-browser-<version>-linux-<arch>.tar.gz и файл с его SHA-256 будут записаны в каталог dist/. Внутри нет абсолютных путей: архив содержит только пользовательскую структуру плагина obs-webkit-browser/{bin/64bit,data}. Установить её можно напрямую в каталог пользовательских плагинов OBS:

mkdir -p ~/.config/obs-studio/plugins
tar -xzf dist/obs-webkit-browser-<version>-linux-<arch>.tar.gz \
  -C ~/.config/obs-studio/plugins

Почему WebKitGTK, а не WPE

WPE архитектурно подходит лучше всего, но пакет wpewebkit отсутствует в актуальном Alpine edge/3.24 (остались только libwpe и backend). WebKitGTK 4.1 есть в текущем репозитории Alpine, использует тот же WebKit и не зависит от CEF. Renderer изолирован от OBS, поэтому падение Web-процесса не должно уронить студию.

Description
Browser for OBS (no CEF)
Readme 267 KiB
2026-07-20 06:50:52 +00:00
Languages
C 73.9%
C++ 20.3%
CMake 4%
Makefile 1.4%
Shell 0.4%