From 114f43924c744bd2b9da548367081a378e0741db Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sun, 20 Sep 2026 04:42:53 +0200 Subject: [PATCH 1/2] quest: ship a prebuilt Linux obs-moq bundle The moq.pro OBS guide tells Linux users to build from source; the only thing stopping a portable bundle is the FFmpeg linkage the source-replacement quest already removes. Co-Authored-By: Claude Opus 5 --- quest/m2/obs-moq-video/README.md | 1 + quest/m2/obs-moq-video/linux-bundle.md | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 quest/m2/obs-moq-video/linux-bundle.md diff --git a/quest/m2/obs-moq-video/README.md b/quest/m2/obs-moq-video/README.md index 0277655ddf..ed69d25f16 100644 --- a/quest/m2/obs-moq-video/README.md +++ b/quest/m2/obs-moq-video/README.md @@ -22,6 +22,7 @@ The quests separate portable decoding, platform GPU delivery, audio, and publish - [Audio playback](/quest/m2/obs-moq-video/audio-playback.md) - add synchronized subscribed audio through moq-audio - [Windows decoded frames](/quest/m2/obs-moq-video/decode-windows.md) - present decoded D3D11 surfaces in OBS without CPU readback - [Linux decoded frames](/quest/m2/obs-moq-video/decode-linux.md) - present supported native decoded surfaces with visible CPU fallback +- [Linux bundle](/quest/m2/obs-moq-video/linux-bundle.md) - attach a portable Linux x86_64 archive to every obs-moq release once FFmpeg is gone - [Encoder presets](/quest/m2/obs-moq-video/presets.md) - define and measure shared low-latency, balanced, and quality policies - [Audio publishing](/quest/m2/obs-moq-video/audio-publish.md) - back an internal OBS Opus encoder with moq-audio - [Video publishing](/quest/m2/obs-moq-video/adapter.md) - back an internal OBS video encoder with moq-video and expose the combined opt-in mode diff --git a/quest/m2/obs-moq-video/linux-bundle.md b/quest/m2/obs-moq-video/linux-bundle.md new file mode 100644 index 0000000000..14677b0aca --- /dev/null +++ b/quest/m2/obs-moq-video/linux-bundle.md @@ -0,0 +1,21 @@ +# [M] Ship a prebuilt Linux obs-moq bundle + +## Goal + +Every `obs-moq-v*` release attaches a Linux x86_64 archive that loads into a stock distro or Flatpak OBS 32+, so Linux users install the plugin the same way macOS and Windows users do instead of building from source. `doc/bin/obs.md` and the moq.pro OBS guide drop their Linux build-from-source recipe. + +## Plan + +- The only reason `obs-build` in `.github/workflows/libmoq.yml` skips Linux is FFmpeg: the source links nix/distro libavcodec, which is not portable. The FFmpeg removal is the blocker; once the plugin is C++ over libmoq plus libobs and Qt6, a Linux build has no extra runtime dependency that OBS itself does not already carry. +- Build on `ubuntu-24.04` (glibc 2.39, the floor OBS's own Linux packages target) against the libobs and Qt6 headers OBS's plugin template uses; the template's `.deb` recipe is the reference. Ship the plain archive layout the other platforms use (`obs-moq-*-x86_64-unknown-linux-gnu.zip` with `bin/64bit/obs-moq.so` and `data/`), extractable into `~/.config/obs-studio/plugins/obs-moq/`. A `.deb` is optional and separate. +- Flatpak OBS cannot load a plugin from the host filesystem. Either document the `~/.var/app/com.obsproject.Studio/config/obs-studio/plugins/` path if the sandbox's runtime ABI matches, or state plainly that Flatpak is unsupported. Verify on a real Flatpak install rather than assuming. +- `cpp/obs/build.sh --target x86_64-unknown-linux-gnu` produces the archive, and the matrix in `obs-build` gains the row; nothing else in the release pipeline changes. Keep the nightly `just obs ci` compile as the PR gate. +- Verify by loading the archive into the oldest supported OBS 32 release and current stable on Ubuntu 24.04 and one non-Debian distro (Fedora), publishing and subscribing against a relay, and inspecting the `.so` with `ldd` for nothing beyond libobs, Qt6, glibc, and OS libraries. + +## Required + +- [Video source replacement](/quest/m2/obs-moq-video/source.md) - removes the FFmpeg linkage that makes a Linux binary non-portable + +## Related + +- [Linux decoded frames](/quest/m2/obs-moq-video/decode-linux.md) - native surface delivery lands on top of the portable CPU path this bundle ships From 51c57096cf9d411d39e31306d3f080733b9451f3 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sun, 20 Sep 2026 17:37:26 -0700 Subject: [PATCH 2/2] docs(quest): refine Linux OBS bundle plan Use the repository's Unix tarball convention and make Flatpak support conditional on real-install ABI validation. Co-Authored-By: GPT-5 --- quest/m2/obs-moq-video/README.md | 2 +- quest/m2/obs-moq-video/linux-bundle.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/quest/m2/obs-moq-video/README.md b/quest/m2/obs-moq-video/README.md index ed69d25f16..6f65cbc83e 100644 --- a/quest/m2/obs-moq-video/README.md +++ b/quest/m2/obs-moq-video/README.md @@ -22,7 +22,7 @@ The quests separate portable decoding, platform GPU delivery, audio, and publish - [Audio playback](/quest/m2/obs-moq-video/audio-playback.md) - add synchronized subscribed audio through moq-audio - [Windows decoded frames](/quest/m2/obs-moq-video/decode-windows.md) - present decoded D3D11 surfaces in OBS without CPU readback - [Linux decoded frames](/quest/m2/obs-moq-video/decode-linux.md) - present supported native decoded surfaces with visible CPU fallback -- [Linux bundle](/quest/m2/obs-moq-video/linux-bundle.md) - attach a portable Linux x86_64 archive to every obs-moq release once FFmpeg is gone +- [Linux bundle](/quest/m2/obs-moq-video/linux-bundle.md) - attach a portable Linux x86_64 tarball to every obs-moq release once FFmpeg is gone - [Encoder presets](/quest/m2/obs-moq-video/presets.md) - define and measure shared low-latency, balanced, and quality policies - [Audio publishing](/quest/m2/obs-moq-video/audio-publish.md) - back an internal OBS Opus encoder with moq-audio - [Video publishing](/quest/m2/obs-moq-video/adapter.md) - back an internal OBS video encoder with moq-video and expose the combined opt-in mode diff --git a/quest/m2/obs-moq-video/linux-bundle.md b/quest/m2/obs-moq-video/linux-bundle.md index 14677b0aca..71e98a7c59 100644 --- a/quest/m2/obs-moq-video/linux-bundle.md +++ b/quest/m2/obs-moq-video/linux-bundle.md @@ -2,15 +2,15 @@ ## Goal -Every `obs-moq-v*` release attaches a Linux x86_64 archive that loads into a stock distro or Flatpak OBS 32+, so Linux users install the plugin the same way macOS and Windows users do instead of building from source. `doc/bin/obs.md` and the moq.pro OBS guide drop their Linux build-from-source recipe. +Every `obs-moq-v*` release attaches a Linux x86_64 tarball that loads into a stock distro's OBS 32+, so Linux users install the plugin the same way macOS and Windows users do instead of building from source. `doc/bin/obs.md` and the moq.pro OBS guide drop their Linux build-from-source recipe. ## Plan - The only reason `obs-build` in `.github/workflows/libmoq.yml` skips Linux is FFmpeg: the source links nix/distro libavcodec, which is not portable. The FFmpeg removal is the blocker; once the plugin is C++ over libmoq plus libobs and Qt6, a Linux build has no extra runtime dependency that OBS itself does not already carry. -- Build on `ubuntu-24.04` (glibc 2.39, the floor OBS's own Linux packages target) against the libobs and Qt6 headers OBS's plugin template uses; the template's `.deb` recipe is the reference. Ship the plain archive layout the other platforms use (`obs-moq-*-x86_64-unknown-linux-gnu.zip` with `bin/64bit/obs-moq.so` and `data/`), extractable into `~/.config/obs-studio/plugins/obs-moq/`. A `.deb` is optional and separate. -- Flatpak OBS cannot load a plugin from the host filesystem. Either document the `~/.var/app/com.obsproject.Studio/config/obs-studio/plugins/` path if the sandbox's runtime ABI matches, or state plainly that Flatpak is unsupported. Verify on a real Flatpak install rather than assuming. -- `cpp/obs/build.sh --target x86_64-unknown-linux-gnu` produces the archive, and the matrix in `obs-build` gains the row; nothing else in the release pipeline changes. Keep the nightly `just obs ci` compile as the PR gate. -- Verify by loading the archive into the oldest supported OBS 32 release and current stable on Ubuntu 24.04 and one non-Debian distro (Fedora), publishing and subscribing against a relay, and inspecting the `.so` with `ldd` for nothing beyond libobs, Qt6, glibc, and OS libraries. +- Build on `ubuntu-24.04` (glibc 2.39, the floor OBS's own Linux packages target) against the libobs and Qt6 headers OBS's plugin template uses; the template's `.deb` recipe is the reference. Ship the plain archive layout the other platforms use (`obs-moq-*-x86_64-unknown-linux-gnu.tar.gz` with `bin/64bit/obs-moq.so` and `data/`), extractable into `~/.config/obs-studio/plugins/obs-moq/`. A `.deb` is optional and separate. +- Flatpak OBS cannot load a plugin from the host filesystem. Verify a real Flatpak install and support it only if the sandbox's runtime ABI matches, documenting the `~/.var/app/com.obsproject.Studio/config/obs-studio/plugins/` path. Otherwise, state plainly that Flatpak is unsupported. +- `cpp/obs/build.sh --target x86_64-unknown-linux-gnu` produces the tarball, and the matrix in `obs-build` gains the row; nothing else in the release pipeline changes. Keep the nightly `just obs ci` compile as the PR gate. +- Verify by loading the tarball into the oldest supported OBS 32 release and current stable on Ubuntu 24.04 and one non-Debian distro (Fedora), publishing and subscribing against a relay, and inspecting the `.so` with `ldd` for nothing beyond libobs, Qt6, glibc, and OS libraries. ## Required