diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml
index 04aa44d15..4a9835148 100644
--- a/.github/workflows/flatpak.yml
+++ b/.github/workflows/flatpak.yml
@@ -65,7 +65,7 @@ jobs:
id: setup
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- CACHE_KEY: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }}
+ CACHE_KEY: flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}
run: |
dnf install -y -q gh
gh extension install actions/gh-actions-cache
@@ -83,7 +83,7 @@ jobs:
uses: flatpak/flatpak-github-actions/flatpak-builder@v6.1
with:
bundle: obs-studio-${{ steps.setup.outputs.git_hash }}.flatpak
- manifest-path: CI/flatpak/com.obsproject.Studio.json
+ manifest-path: build-aux/com.obsproject.Studio.json
cache: ${{ fromJSON(steps.setup.outputs.cache_hit) }}
cache-key: ${{ steps.setup.outputs.cache_key }}
mirror-screenshots-url: https://dl.flathub.org/repo/screenshots
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index dfccd902a..9c91f1e8b 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -374,7 +374,7 @@ jobs:
id: setup
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- CACHE_KEY: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }}
+ CACHE_KEY: flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}
run: |
dnf install -y -q gh
gh extension install actions/gh-actions-cache
@@ -393,7 +393,7 @@ jobs:
with:
build-bundle: ${{ fromJSON(needs.config.outputs.create_artifacts) }}
bundle: obs-studio-flatpak-${{ steps.setup.outputs.git_hash }}.flatpak
- manifest-path: CI/flatpak/com.obsproject.Studio.json
+ manifest-path: build-aux/com.obsproject.Studio.json
cache: ${{ fromJSON(steps.setup.outputs.cache_hit) || (github.event_name == 'push' && github.ref == 'refs/heads/master') }}
restore-cache: ${{ fromJSON(steps.setup.outputs.cache_hit) }}
cache-key: ${{ steps.setup.outputs.cache_key }}
diff --git a/.gitignore b/.gitignore
index 5ecbaf77b..04283d354 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
#cmake
/build*/
+!/build-aux/
/release*/
/debug*/
.vs/
diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json
deleted file mode 100644
index 12cd58b6d..000000000
--- a/CI/flatpak/com.obsproject.Studio.json
+++ /dev/null
@@ -1,515 +0,0 @@
-{
- "app-id": "com.obsproject.Studio",
- "runtime": "org.kde.Platform",
- "runtime-version": "6.4",
- "sdk": "org.kde.Sdk",
- "command": "obs",
- "finish-args": [
- "--socket=wayland",
- "--socket=x11",
- "--socket=pulseaudio",
- "--device=all",
- "--share=network",
- "--share=ipc",
- "--filesystem=xdg-run/pipewire-0",
- "--filesystem=host",
- "--talk-name=org.kde.StatusNotifierWatcher",
- "--talk-name=org.freedesktop.Flatpak",
- "--talk-name=org.freedesktop.Notifications",
- "--talk-name=org.a11y.Bus",
- "--own-name=org.kde.StatusNotifierItem-2-2",
- "--system-talk-name=org.freedesktop.Avahi",
- "--env=VST_PATH=/app/extensions/Plugins/vst"
- ],
- "add-extensions": {
- "com.obsproject.Studio.Plugin": {
- "directory": "plugins",
- "subdirectories": true,
- "add-ld-path": "lib",
- "merge-dirs": "lib/obs-plugins;share/obs/obs-plugins",
- "no-autodownload": true,
- "autodelete": true
- },
- "org.freedesktop.LinuxAudio.Plugins": {
- "directory": "extensions/Plugins",
- "version": "22.08",
- "add-ld-path": "lib",
- "merge-dirs": "vst",
- "subdirectories": true,
- "no-autodownload": true
- }
- },
- "cleanup": [
- "/share/man",
- "*.la"
- ],
- "modules": [
- {
- "name": "x264",
- "config-opts": [
- "--disable-cli",
- "--enable-shared"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://code.videolan.org/videolan/x264.git",
- "commit": "eaa68fad9e5d201d42fde51665f2d137ae96baf0"
- }
- ]
- },
- {
- "name": "v4l-utils",
- "config-opts": [
- "--disable-static",
- "--disable-doxygen-doc",
- "--disable-libdvbv5",
- "--disable-v4l-utils",
- "--disable-qv4l2",
- "--with-udevdir=/app/lib/udev/"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "archive",
- "url": "https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.22.0.tar.bz2",
- "sha256": "1069e5d7909bcc563baeaadc3a5c496f0e658524c413cf7818816e37bfcea344"
- }
- ]
- },
- {
- "name": "nv-codec-headers",
- "no-autogen": true,
- "make-install-args": [
- "PREFIX=/app"
- ],
- "cleanup": [
- "*"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/FFmpeg/nv-codec-headers.git",
- "tag": "n12.0.16.0",
- "commit": "c5e4af74850a616c42d39ed45b9b8568b71bf8bf"
- }
- ]
- },
- {
- "name": "srt",
- "buildsystem": "cmake-ninja",
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DENABLE_STATIC=OFF",
- "-DENABLE_APPS=OFF",
- "-DENABLE_LOGGING=OFF"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig",
- "/bin"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/Haivision/srt.git",
- "tag": "v1.5.1",
- "commit": "0bc3b03202b3159fc9b085b3ae6d66ec071c25d6"
- }
- ]
- },
- {
- "name": "mbedtls",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
- "-DUSE_SHARED_MBEDTLS_LIBRARY=ON",
- "-DUSE_STATIC_MBEDTLS_LIBRARY=OFF",
- "-DENABLE_TESTING=OFF",
- "-DENABLE_PROGRAMS=OFF"
- ],
- "cleanup": [
- "/include"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/ARMmbed/mbedtls.git",
- "commit": "869298bffeea13b205343361b7a7daf2b210e33d",
- "tag": "v3.2.1"
- }
- ]
- },
- {
- "name": "librist",
- "buildsystem":"meson",
- "builddir": true,
- "config-opts": [
- "-Duse_mbedtls=true",
- "-Dtest=false",
- "-Dbuilt_tools=false",
- "-Dbuiltin_cjson=true"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://code.videolan.org/rist/librist.git",
- "commit": "809390b3b75a259a704079d0fb4d8f1b5f7fa956"
- }
- ]
- },
- {
- "name": "aom",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DBUILD_SHARED_LIBS=ON",
- "-DENABLE_DOCS=OFF",
- "-DENABLE_EXAMPLES=OFF",
- "-DENABLE_TESTDATA=OFF",
- "-DENABLE_TESTS=OFF",
- "-DENABLE_TOOLS=OFF "
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://aomedia.googlesource.com/aom.git",
- "tag": "v3.6.0",
- "commit": "3c65175b1972da4a1992c1dae2365b48d13f9a8d"
- }
- ]
- },
- {
- "name": "svt-av1",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DBUILD_SHARED_LIBS=ON",
- "-DBUILD_APPS=OFF",
- "-DBUILD_DEC=ON",
- "-DBUILD_ENC=ON",
- "-DBUILD_TESTING=OFF"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://gitlab.com/AOMediaCodec/SVT-AV1.git",
- "tag": "v1.4.1",
- "commit": "018276d714ce65d9b586f6205ee016cbd8d5425d"
- }
- ]
- },
- {
- "name": "ffmpeg",
- "config-opts": [
- "--enable-gpl",
- "--enable-shared",
- "--disable-static",
- "--enable-gnutls",
- "--disable-doc",
- "--disable-programs",
- "--disable-devices",
- "--enable-libopus",
- "--enable-libvpx",
- "--enable-libvorbis",
- "--enable-libx264",
- "--enable-nvenc",
- "--enable-libsrt",
- "--enable-librist",
- "--enable-libaom",
- "--enable-libsvtav1"
- ],
- "cleanup": [
- "/share/ffmpeg"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/FFmpeg/FFmpeg.git",
- "commit": "a6dc92968a325d331bb6dcf9b3b2248026cd1d6c",
- "disable-shallow-clone": true
- },
- {
- "type": "git",
- "dest": "obs-deps",
- "url": "https://github.com/obsproject/obs-deps.git",
- "tag": "2023-04-12",
- "commit": "24e25fd83e6938cfe3cc5020230430b31ba5df59"
- },
- {
- "type": "shell",
- "commands": [
- "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch",
- "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch"
- ]
- }
- ]
- },
- {
- "name": "luajit",
- "no-autogen": true,
- "cleanup": [
- "/bin",
- "/include",
- "/lib/pkgconfig",
- "*.a"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://luajit.org/git/luajit-2.0.git",
- "commit": "505e2c03de35e2718eef0d2d3660712e06dadf1f",
- "disable-shallow-clone": true
- },
- {
- "type": "shell",
- "commands": [
- "sed -i 's|/usr/local|/app|' ./Makefile"
- ]
- }
- ]
- },
- {
- "name": "swig",
- "config-opts": [
- "--without-boost",
- "--without-pcre",
- "--without-alllang",
- "--with-lua=/app/bin/luajit-2.1.0-beta3",
- "--with-luaincl=/app/include/luajit-2.1",
- "--with-python3"
- ],
- "cleanup": [
- "*"
- ],
- "sources": [
- {
- "type": "archive",
- "url": "https://prdownloads.sourceforge.net/swig/swig-4.0.2.tar.gz",
- "sha256": "d53be9730d8d58a16bf0cbd1f8ac0c0c3e1090573168bfa151b01eb47fa906fc"
- }
- ]
- },
- {
- "name": "pipewire",
- "buildsystem": "meson",
- "config-opts": [
- "-Daudiotestsrc=disabled",
- "-Droc=disabled",
- "-Dvideotestsrc=disabled",
- "-Dvolume=disabled",
- "-Dvulkan=disabled",
- "-Ddocs=disabled",
- "-Dman=disabled",
- "-Dbluez5-codec-ldac=disabled",
- "-Dbluez5-codec-aptx=disabled",
- "-Dlibcamera=disabled",
- "-Dudevrulesdir=/app/lib/udev/rules.d/",
- "-Dsession-managers=[]",
- "-Dtests=disabled",
- "-Dexamples=disabled",
- "-Dpw-cat=disabled"
- ],
- "cleanup": [
- "/bin"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/pipewire/pipewire.git",
- "tag": "0.3.65",
- "commit": "9558a5d5e0360d8af822431c76ee858a8c7495ac"
- }
- ]
- },
- {
- "name": "ntv2",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DAJA_BUILD_OPENSOURCE=ON",
- "-DAJA_BUILD_APPS=OFF",
- "-DAJA_INSTALL_HEADERS=ON"
- ],
- "cleanup": [
- "/include"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/aja-video/ntv2.git",
- "tag": "v16.2-bugfix5",
- "commit": "0acbac70a0b5e6509cca78cfbf69974c73c10db9"
- }
- ]
- },
- {
- "name": "jansson",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DJANSSON_EXAMPLES=OFF",
- "-DJANSSON_BUILD_DOCS=OFF",
- "-DJANSSON_BUILD_SHARED_LIBS=ON",
- "-DJANSSON_WITHOUT_TESTS=ON"
- ],
- "cleanup": [
- "/include",
- "/lib/pkgconfig"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/akheron/jansson.git",
- "tag": "v2.14",
- "commit": "684e18c927e89615c2d501737e90018f4930d6c5"
- }
- ]
- },
- {
- "name": "nlohmann-json",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DJSON_BuildTests=OFF"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/nlohmann/json.git",
- "tag": "v3.11.2",
- "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
- }
- ]
- },
- {
- "name": "websocketpp",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DENABLE_CPP11=ON",
- "-DBUILD_EXAMPLES=OFF",
- "-DBUILD_TESTS=OFF"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/zaphoyd/websocketpp.git",
- "tag": "0.8.2",
- "commit": "56123c87598f8b1dd471be83ca841ceae07f95ba"
- }
- ]
- },
- {
- "name": "asio",
- "buildsystem": "simple",
- "build-commands": [
- "mkdir -p /app/include",
- "cp asio/include/asio.hpp /app/include/",
- "cp -R asio/include/asio /app/include/"
- ],
- "sources": [
- {
- "type": "git",
- "url": "https://github.com/chriskohlhoff/asio.git",
- "tag": "asio-1-12-1",
- "commit": "b73dc1d2c0ecb9452a87c26544d7f71e24342df6"
- }
- ]
- },
- {
- "name": "cef",
- "buildsystem": "cmake-ninja",
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release"
- ],
- "no-make-install": true,
- "make-args": [
- "libcef_dll_wrapper"
- ],
- "build-commands": [
- "mkdir -p /app/cef/libcef_dll_wrapper",
- "cp -R ./include /app/cef",
- "cp -R ./Release /app/cef",
- "cp -R ./Resources /app/cef",
- "cp -R ./libcef_dll_wrapper/libcef_dll_wrapper.a /app/cef/libcef_dll_wrapper"
- ],
- "cleanup": [
- "*"
- ],
- "sources": [
- {
- "type": "archive",
- "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_5060_linux64.tar.bz2",
- "sha256": "ac4e2a8ebf20700e4e36353e314f876623633dd5b474778a2548bb66bdbea11d"
- }
- ]
- },
- {
- "name": "obs",
- "buildsystem": "cmake-ninja",
- "builddir": true,
- "config-opts": [
- "-DCMAKE_BUILD_TYPE=Release",
- "-DENABLE_WAYLAND=ON",
- "-DENABLE_BROWSER=ON",
- "-DCEF_ROOT_DIR=/app/cef",
- "-DUSE_XDG=ON",
- "-DENABLE_ALSA=OFF",
- "-DENABLE_PULSEAUDIO=ON",
- "-DENABLE_JACK=ON",
- "-DENABLE_RTMPS=ON",
- "-DENABLE_VLC=OFF",
- "-DENABLE_AJA=ON",
- "-DENABLE_LIBFDK=ON"
- ],
- "secret-opts": [
- "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID",
- "-DRESTREAM_HASH=$RESTREAM_HASH",
- "-DTWITCH_CLIENTID=$TWITCH_CLIENTID",
- "-DTWITCH_HASH=$TWITCH_HASH",
- "-DYOUTUBE_CLIENTID=$YOUTUBE_CLIENTID",
- "-DYOUTUBE_CLIENTID_HASH=$YOUTUBE_CLIENTID_HASH",
- "-DYOUTUBE_SECRET=$YOUTUBE_SECRET",
- "-DYOUTUBE_SECRET_HASH=$YOUTUBE_SECRET_HASH"
- ],
- "post-install": [
- "install -d /app/plugins",
- "install -d /app/extensions/Plugins"
- ],
- "sources": [
- {
- "type": "dir",
- "path": "../../"
- }
- ]
- }
- ]
-}
diff --git a/UI/xdg-data/com.obsproject.Studio.appdata.xml.in b/UI/xdg-data/com.obsproject.Studio.appdata.xml.in
index 81033ecdc..a67869806 100644
--- a/UI/xdg-data/com.obsproject.Studio.appdata.xml.in
+++ b/UI/xdg-data/com.obsproject.Studio.appdata.xml.in
@@ -44,6 +44,6 @@
- https://github.com/obsproject/obs-studio/blob/@GIT_HASH@/CI/flatpak/com.obsproject.Studio.json
+ https://github.com/obsproject/obs-studio/blob/@GIT_HASH@/build-aux/
diff --git a/build-aux/README.md b/build-aux/README.md
new file mode 100644
index 000000000..2c0cedc81
--- /dev/null
+++ b/build-aux/README.md
@@ -0,0 +1,24 @@
+# `build-aux` folder
+
+This folder contains only the Flatpak manifest used to build OBS Studio.
+
+## OBS Studio Flatpak Manifest
+
+The manifest is composed of multiple files:
+ - The main manifest `com.obsproject.Studio.json`
+ - The `modules` folder which contains OBS Studio dependencies modules
+
+### Manifest modules
+
+Modules are ordered/dispatched in numbered categories following a short list of rules:
+- A module must not depend on another module from the same category, so a module can only depend on modules from lower numbered categories.
+- A module without dependencies must be placed in the highest numbered category in use, excluding categories meant for specific types of dependency.
+
+Actual categories:
+ - `99-`: CEF
+ - `90-`: Headers-only libraries that are dependencies of only OBS Studio
+ - `50-`: Modules that are dependencies of only OBS Studio
+ - `40-`: Modules that are dependencies of the `50-` category
+ - `30-`: FFmpeg
+ - `20-`: Modules that are dependencies of FFmpeg
+ - `10-`: Modules that are dependencies of the `20-` category
diff --git a/build-aux/com.obsproject.Studio.json b/build-aux/com.obsproject.Studio.json
new file mode 100644
index 000000000..394f8b2f8
--- /dev/null
+++ b/build-aux/com.obsproject.Studio.json
@@ -0,0 +1,105 @@
+{
+ "app-id": "com.obsproject.Studio",
+ "runtime": "org.kde.Platform",
+ "runtime-version": "6.4",
+ "sdk": "org.kde.Sdk",
+ "command": "obs",
+ "finish-args": [
+ "--socket=wayland",
+ "--socket=x11",
+ "--socket=pulseaudio",
+ "--device=all",
+ "--share=network",
+ "--share=ipc",
+ "--filesystem=xdg-run/pipewire-0",
+ "--filesystem=host",
+ "--talk-name=org.kde.StatusNotifierWatcher",
+ "--talk-name=org.freedesktop.Flatpak",
+ "--talk-name=org.freedesktop.Notifications",
+ "--talk-name=org.a11y.Bus",
+ "--own-name=org.kde.StatusNotifierItem-2-2",
+ "--system-talk-name=org.freedesktop.Avahi",
+ "--env=VST_PATH=/app/extensions/Plugins/vst"
+ ],
+ "add-extensions": {
+ "com.obsproject.Studio.Plugin": {
+ "directory": "plugins",
+ "subdirectories": true,
+ "add-ld-path": "lib",
+ "merge-dirs": "lib/obs-plugins;share/obs/obs-plugins",
+ "no-autodownload": true,
+ "autodelete": true
+ },
+ "org.freedesktop.LinuxAudio.Plugins": {
+ "directory": "extensions/Plugins",
+ "version": "22.08",
+ "add-ld-path": "lib",
+ "merge-dirs": "vst",
+ "subdirectories": true,
+ "no-autodownload": true
+ }
+ },
+ "cleanup": [
+ "/share/man",
+ "*.la"
+ ],
+ "modules": [
+ "modules/10-mbedtls.json",
+ "modules/20-aom.json",
+ "modules/20-librist.json",
+ "modules/20-nv-codec.json",
+ "modules/20-srt.json",
+ "modules/20-svt-av1.json",
+ "modules/20-x264.json",
+ "modules/30-ffmpeg.json",
+ "modules/40-luajit.json",
+ "modules/50-jansson.json",
+ "modules/50-ntv2.json",
+ "modules/50-pipewire.json",
+ "modules/50-swig.json",
+ "modules/50-v4l-utils.json",
+ "modules/90-asio.json",
+ "modules/90-nlohmann-json.json",
+ "modules/90-websocketpp.json",
+ "modules/99-cef.json",
+ {
+ "name": "obs",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DENABLE_WAYLAND=ON",
+ "-DENABLE_BROWSER=ON",
+ "-DCEF_ROOT_DIR=/app/cef",
+ "-DUSE_XDG=ON",
+ "-DENABLE_ALSA=OFF",
+ "-DENABLE_PULSEAUDIO=ON",
+ "-DENABLE_JACK=ON",
+ "-DENABLE_RTMPS=ON",
+ "-DENABLE_VLC=OFF",
+ "-DENABLE_AJA=ON",
+ "-DENABLE_LIBFDK=ON"
+ ],
+ "secret-opts": [
+ "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID",
+ "-DRESTREAM_HASH=$RESTREAM_HASH",
+ "-DTWITCH_CLIENTID=$TWITCH_CLIENTID",
+ "-DTWITCH_HASH=$TWITCH_HASH",
+ "-DYOUTUBE_CLIENTID=$YOUTUBE_CLIENTID",
+ "-DYOUTUBE_CLIENTID_HASH=$YOUTUBE_CLIENTID_HASH",
+ "-DYOUTUBE_SECRET=$YOUTUBE_SECRET",
+ "-DYOUTUBE_SECRET_HASH=$YOUTUBE_SECRET_HASH"
+ ],
+ "post-install": [
+ "install -d /app/plugins",
+ "install -d /app/extensions/Plugins"
+ ],
+ "sources": [
+ {
+ "type": "dir",
+ "path": "../"
+ }
+ ]
+ }
+ ]
+}
diff --git a/build-aux/modules/10-mbedtls.json b/build-aux/modules/10-mbedtls.json
new file mode 100644
index 000000000..0bf75f8c3
--- /dev/null
+++ b/build-aux/modules/10-mbedtls.json
@@ -0,0 +1,24 @@
+{
+ "name": "mbedtls",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
+ "-DUSE_SHARED_MBEDTLS_LIBRARY=ON",
+ "-DUSE_STATIC_MBEDTLS_LIBRARY=OFF",
+ "-DENABLE_TESTING=OFF",
+ "-DENABLE_PROGRAMS=OFF"
+ ],
+ "cleanup": [
+ "/include"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/ARMmbed/mbedtls.git",
+ "commit": "869298bffeea13b205343361b7a7daf2b210e33d",
+ "tag": "v3.2.1"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-aom.json b/build-aux/modules/20-aom.json
new file mode 100644
index 000000000..94f94b00d
--- /dev/null
+++ b/build-aux/modules/20-aom.json
@@ -0,0 +1,26 @@
+{
+ "name": "aom",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DBUILD_SHARED_LIBS=ON",
+ "-DENABLE_DOCS=OFF",
+ "-DENABLE_EXAMPLES=OFF",
+ "-DENABLE_TESTDATA=OFF",
+ "-DENABLE_TESTS=OFF",
+ "-DENABLE_TOOLS=OFF "
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://aomedia.googlesource.com/aom.git",
+ "tag": "v3.6.0",
+ "commit": "3c65175b1972da4a1992c1dae2365b48d13f9a8d"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-librist.json b/build-aux/modules/20-librist.json
new file mode 100644
index 000000000..732827c8f
--- /dev/null
+++ b/build-aux/modules/20-librist.json
@@ -0,0 +1,22 @@
+{
+ "name": "librist",
+ "buildsystem": "meson",
+ "builddir": true,
+ "config-opts": [
+ "-Duse_mbedtls=true",
+ "-Dtest=false",
+ "-Dbuilt_tools=false",
+ "-Dbuiltin_cjson=true"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://code.videolan.org/rist/librist.git",
+ "commit": "809390b3b75a259a704079d0fb4d8f1b5f7fa956"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-nv-codec.json b/build-aux/modules/20-nv-codec.json
new file mode 100644
index 000000000..b8b3fa14b
--- /dev/null
+++ b/build-aux/modules/20-nv-codec.json
@@ -0,0 +1,18 @@
+{
+ "name": "nv-codec",
+ "no-autogen": true,
+ "make-install-args": [
+ "PREFIX=/app"
+ ],
+ "cleanup": [
+ "*"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/FFmpeg/nv-codec-headers.git",
+ "tag": "n12.0.16.0",
+ "commit": "c5e4af74850a616c42d39ed45b9b8568b71bf8bf"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-srt.json b/build-aux/modules/20-srt.json
new file mode 100644
index 000000000..1581973a9
--- /dev/null
+++ b/build-aux/modules/20-srt.json
@@ -0,0 +1,23 @@
+{
+ "name": "srt",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DENABLE_STATIC=OFF",
+ "-DENABLE_APPS=OFF",
+ "-DENABLE_LOGGING=OFF"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/bin"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/Haivision/srt.git",
+ "tag": "v1.5.1",
+ "commit": "0bc3b03202b3159fc9b085b3ae6d66ec071c25d6"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-svt-av1.json b/build-aux/modules/20-svt-av1.json
new file mode 100644
index 000000000..e2ad021aa
--- /dev/null
+++ b/build-aux/modules/20-svt-av1.json
@@ -0,0 +1,25 @@
+{
+ "name": "svt-av1",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DBUILD_SHARED_LIBS=ON",
+ "-DBUILD_APPS=OFF",
+ "-DBUILD_DEC=ON",
+ "-DBUILD_ENC=ON",
+ "-DBUILD_TESTING=OFF"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://gitlab.com/AOMediaCodec/SVT-AV1.git",
+ "tag": "v1.4.1",
+ "commit": "018276d714ce65d9b586f6205ee016cbd8d5425d"
+ }
+ ]
+}
diff --git a/build-aux/modules/20-x264.json b/build-aux/modules/20-x264.json
new file mode 100644
index 000000000..8927b725b
--- /dev/null
+++ b/build-aux/modules/20-x264.json
@@ -0,0 +1,18 @@
+{
+ "name": "x264",
+ "config-opts": [
+ "--disable-cli",
+ "--enable-shared"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://code.videolan.org/videolan/x264.git",
+ "commit": "eaa68fad9e5d201d42fde51665f2d137ae96baf0"
+ }
+ ]
+}
diff --git a/build-aux/modules/30-ffmpeg.json b/build-aux/modules/30-ffmpeg.json
new file mode 100644
index 000000000..2f0dd4101
--- /dev/null
+++ b/build-aux/modules/30-ffmpeg.json
@@ -0,0 +1,46 @@
+{
+ "name": "ffmpeg",
+ "config-opts": [
+ "--enable-gpl",
+ "--enable-shared",
+ "--disable-static",
+ "--enable-gnutls",
+ "--disable-doc",
+ "--disable-programs",
+ "--disable-devices",
+ "--enable-libopus",
+ "--enable-libvpx",
+ "--enable-libvorbis",
+ "--enable-libx264",
+ "--enable-nvenc",
+ "--enable-libsrt",
+ "--enable-librist",
+ "--enable-libaom",
+ "--enable-libsvtav1"
+ ],
+ "cleanup": [
+ "/share/ffmpeg"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/FFmpeg/FFmpeg.git",
+ "commit": "a6dc92968a325d331bb6dcf9b3b2248026cd1d6c",
+ "disable-shallow-clone": true
+ },
+ {
+ "type": "git",
+ "dest": "obs-deps",
+ "url": "https://github.com/obsproject/obs-deps.git",
+ "tag": "2023-04-12",
+ "commit": "24e25fd83e6938cfe3cc5020230430b31ba5df59"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch",
+ "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch"
+ ]
+ }
+ ]
+}
diff --git a/build-aux/modules/40-luajit.json b/build-aux/modules/40-luajit.json
new file mode 100644
index 000000000..902bfb5da
--- /dev/null
+++ b/build-aux/modules/40-luajit.json
@@ -0,0 +1,24 @@
+{
+ "name": "luajit",
+ "no-autogen": true,
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "*.a"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://luajit.org/git/luajit-2.0.git",
+ "commit": "505e2c03de35e2718eef0d2d3660712e06dadf1f",
+ "disable-shallow-clone": true
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i 's|/usr/local|/app|' ./Makefile"
+ ]
+ }
+ ]
+}
diff --git a/build-aux/modules/50-jansson.json b/build-aux/modules/50-jansson.json
new file mode 100644
index 000000000..b7411250b
--- /dev/null
+++ b/build-aux/modules/50-jansson.json
@@ -0,0 +1,24 @@
+{
+ "name": "jansson",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DJANSSON_EXAMPLES=OFF",
+ "-DJANSSON_BUILD_DOCS=OFF",
+ "-DJANSSON_BUILD_SHARED_LIBS=ON",
+ "-DJANSSON_WITHOUT_TESTS=ON"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/akheron/jansson.git",
+ "tag": "v2.14",
+ "commit": "684e18c927e89615c2d501737e90018f4930d6c5"
+ }
+ ]
+}
diff --git a/build-aux/modules/50-ntv2.json b/build-aux/modules/50-ntv2.json
new file mode 100644
index 000000000..cb1a9838f
--- /dev/null
+++ b/build-aux/modules/50-ntv2.json
@@ -0,0 +1,22 @@
+{
+ "name": "ntv2",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DAJA_BUILD_OPENSOURCE=ON",
+ "-DAJA_BUILD_APPS=OFF",
+ "-DAJA_INSTALL_HEADERS=ON"
+ ],
+ "cleanup": [
+ "/include"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/aja-video/ntv2.git",
+ "tag": "v16.2-bugfix5",
+ "commit": "0acbac70a0b5e6509cca78cfbf69974c73c10db9"
+ }
+ ]
+}
diff --git a/build-aux/modules/50-pipewire.json b/build-aux/modules/50-pipewire.json
new file mode 100644
index 000000000..5b08f9f10
--- /dev/null
+++ b/build-aux/modules/50-pipewire.json
@@ -0,0 +1,32 @@
+{
+ "name": "pipewire",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Daudiotestsrc=disabled",
+ "-Droc=disabled",
+ "-Dvideotestsrc=disabled",
+ "-Dvolume=disabled",
+ "-Dvulkan=disabled",
+ "-Ddocs=disabled",
+ "-Dman=disabled",
+ "-Dbluez5-codec-ldac=disabled",
+ "-Dbluez5-codec-aptx=disabled",
+ "-Dlibcamera=disabled",
+ "-Dudevrulesdir=/app/lib/udev/rules.d/",
+ "-Dsession-managers=[]",
+ "-Dtests=disabled",
+ "-Dexamples=disabled",
+ "-Dpw-cat=disabled"
+ ],
+ "cleanup": [
+ "/bin"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/pipewire/pipewire.git",
+ "tag": "0.3.65",
+ "commit": "9558a5d5e0360d8af822431c76ee858a8c7495ac"
+ }
+ ]
+}
diff --git a/build-aux/modules/50-swig.json b/build-aux/modules/50-swig.json
new file mode 100644
index 000000000..ef7edf105
--- /dev/null
+++ b/build-aux/modules/50-swig.json
@@ -0,0 +1,21 @@
+{
+ "name": "swig",
+ "config-opts": [
+ "--without-boost",
+ "--without-pcre",
+ "--without-alllang",
+ "--with-lua=/app/bin/luajit-2.1.0-beta3",
+ "--with-luaincl=/app/include/luajit-2.1",
+ "--with-python3"
+ ],
+ "cleanup": [
+ "*"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://prdownloads.sourceforge.net/swig/swig-4.0.2.tar.gz",
+ "sha256": "d53be9730d8d58a16bf0cbd1f8ac0c0c3e1090573168bfa151b01eb47fa906fc"
+ }
+ ]
+}
diff --git a/build-aux/modules/50-v4l-utils.json b/build-aux/modules/50-v4l-utils.json
new file mode 100644
index 000000000..0348ff439
--- /dev/null
+++ b/build-aux/modules/50-v4l-utils.json
@@ -0,0 +1,22 @@
+{
+ "name": "v4l-utils",
+ "config-opts": [
+ "--disable-static",
+ "--disable-doxygen-doc",
+ "--disable-libdvbv5",
+ "--disable-v4l-utils",
+ "--disable-qv4l2",
+ "--with-udevdir=/app/lib/udev/"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.22.0.tar.bz2",
+ "sha256": "1069e5d7909bcc563baeaadc3a5c496f0e658524c413cf7818816e37bfcea344"
+ }
+ ]
+}
diff --git a/build-aux/modules/90-asio.json b/build-aux/modules/90-asio.json
new file mode 100644
index 000000000..1d1a0ea7a
--- /dev/null
+++ b/build-aux/modules/90-asio.json
@@ -0,0 +1,17 @@
+{
+ "name": "asio",
+ "buildsystem": "simple",
+ "build-commands": [
+ "mkdir -p /app/include",
+ "cp asio/include/asio.hpp /app/include/",
+ "cp -R asio/include/asio /app/include/"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/chriskohlhoff/asio.git",
+ "tag": "asio-1-12-1",
+ "commit": "b73dc1d2c0ecb9452a87c26544d7f71e24342df6"
+ }
+ ]
+}
diff --git a/build-aux/modules/90-nlohmann-json.json b/build-aux/modules/90-nlohmann-json.json
new file mode 100644
index 000000000..4087737bf
--- /dev/null
+++ b/build-aux/modules/90-nlohmann-json.json
@@ -0,0 +1,17 @@
+{
+ "name": "nlohmann-json",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DJSON_BuildTests=OFF"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/nlohmann/json.git",
+ "tag": "v3.11.2",
+ "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
+ }
+ ]
+}
diff --git a/build-aux/modules/90-websocketpp.json b/build-aux/modules/90-websocketpp.json
new file mode 100644
index 000000000..c67b56058
--- /dev/null
+++ b/build-aux/modules/90-websocketpp.json
@@ -0,0 +1,19 @@
+{
+ "name": "websocketpp",
+ "buildsystem": "cmake-ninja",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DENABLE_CPP11=ON",
+ "-DBUILD_EXAMPLES=OFF",
+ "-DBUILD_TESTS=OFF"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/zaphoyd/websocketpp.git",
+ "tag": "0.8.2",
+ "commit": "56123c87598f8b1dd471be83ca841ceae07f95ba"
+ }
+ ]
+}
diff --git a/build-aux/modules/99-cef.json b/build-aux/modules/99-cef.json
new file mode 100644
index 000000000..beeadc137
--- /dev/null
+++ b/build-aux/modules/99-cef.json
@@ -0,0 +1,28 @@
+{
+ "name": "cef",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release"
+ ],
+ "no-make-install": true,
+ "make-args": [
+ "libcef_dll_wrapper"
+ ],
+ "build-commands": [
+ "mkdir -p /app/cef/libcef_dll_wrapper",
+ "cp -R ./include /app/cef",
+ "cp -R ./Release /app/cef",
+ "cp -R ./Resources /app/cef",
+ "cp -R ./libcef_dll_wrapper/libcef_dll_wrapper.a /app/cef/libcef_dll_wrapper"
+ ],
+ "cleanup": [
+ "*"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_5060_linux64.tar.bz2",
+ "sha256": "ac4e2a8ebf20700e4e36353e314f876623633dd5b474778a2548bb66bdbea11d"
+ }
+ ]
+}