Files
OBS-WebKitGTK/README.md
2026-07-20 10:57:34 +05:00

102 lines
7.4 KiB
Markdown
Raw Permalink 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 в отдельном процессе; 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-панели;
- опциональный захват звука каждого browser source в отдельную полосу Audio Mixer OBS;
- размер 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`, как вкладки одного браузера.
Захват звука по умолчанию выключен. Включите «Захватывать звук браузера» в
настройках нужного источника; его громкость появится отдельной полосой в Audio Mixer OBS.
Для захвата требуется работающий PulseAudio-совместимый сервер (в том числе
PipeWire Pulse) и GStreamer `pulsesink`; скрипт установки зависимостей добавляет
необходимый пакет `gst-plugins-good`.
Все 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
```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**.
Для панели откройте **Док-панели → Пользовательские web-панели...**, добавьте
название и URL и нажмите **Применить**. Панель можно скрывать и показывать через
обычное меню доков OBS; правый клик по странице открывает команду перезагрузки.
Если OBS установлен в нестандартный prefix, задайте при конфигурации
`OBS_PLUGIN_DIR` и `OBS_PLUGIN_DATA_DIR`.
## Архив для публикации
После установки зависимостей используйте отдельные цели `Makefile`:
```sh
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:
```sh
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-процесса не должно уронить студию.