gpu accelerated
This commit is contained in:
53
README.md
Normal file
53
README.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 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;
|
||||
- размер 2–8192 px и 1–60 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-процесса не должно уронить студию.
|
||||
Reference in New Issue
Block a user