Skip to content

Add a GStreamer (moqsrc) subscriber to the media matrix#6

Merged
kixelated merged 1 commit into
mainfrom
gst-subscribe-smoke
Jun 4, 2026
Merged

Add a GStreamer (moqsrc) subscriber to the media matrix#6
kixelated merged 1 commit into
mainfrom
gst-subscribe-smoke

Conversation

@kixelated
Copy link
Copy Markdown
Contributor

Re-opens the GStreamer work after #5 was auto-marked "merged" when its stacked base (token-interop-smoke, #4) merged — the gst commit was never actually in main. Same single commit, now based directly on main.

Why

moq-gst ships the moqsink/moqsrc GStreamer elements via apt (gstreamer1.0-moq), brew, rpm, nix, and release tarballs — but the only coverage was a gst-inspect load check. Nothing proved a real pipeline moves bytes end-to-end against the other implementations.

What

A gst subscriber cell. Like the C client, it downloads the latest moq-gst tarball, points GST_PLUGIN_PATH at it, confirms the plugin loads (gst-inspect) against the host's system GStreamer, then runs:

moqsrc url=… broadcast=… ! filesink location=/dev/stdout

and grabs one byte — the same "did a frame's bytes arrive" bar and head -c 1 early-exit idiom as the rust subscriber (no decode). Subscribe-only for now; publishing via moqsink needs an encoder + request-pad muxing (a follow-up).

Current state: red, on purpose

No moq-gst release has been cut yet (no moq-gst-v* tag), so there's nothing to install and the cell reports no moq-gst-v* release found — failing only its own cells, like the Go cell. That red is the signal. The interop itself is validated locally: built from source (cargo build -p moq-gst) and pointed at via the new MOQ_GST_PLUGIN_DIR override, moqsrc reads a rust-published H.264 broadcast end-to-end (rust -> gst PASS), with the negative control and broken-channel paths confirmed too. The cell greens automatically once the first release ships.

Wiring

  • CI: system GStreamer installed on every runner + gst added to the subscriber list.
  • Freshness: asserts smoke.sh resolves the newest moq-gst-v* release (never pinned).
  • justfile: gst added to just full.
  • Override: MOQ_GST_PLUGIN_DIR points the cell at a local cargo build -p moq-gst output.

shellcheck clean; actionlint clean.

🤖 Generated with Claude Code

moq-gst ships the moqsink/moqsrc GStreamer elements via apt
(gstreamer1.0-moq), brew, rpm, nix, and release tarballs, but the only
coverage was a gst-inspect load check in the moq repo -- nothing proved a
real pipeline moves bytes end-to-end against the other implementations.

Adds a `gst` subscriber cell. Like the C client, it downloads the latest
moq-gst prebuilt tarball, points GST_PLUGIN_PATH at it, and confirms the
plugin loads (gst-inspect) against the host's *system* GStreamer -- the
.deb/brew/tarball scenario, since the prebuilt plugin dynamic-links system
libgstreamer. The subscriber runs `moqsrc url=... broadcast=... ! filesink
location=/dev/stdout` and grabs one byte, the same "bytes moved" bar and
head -c 1 early-exit idiom as the rust subscriber (no decode). MoQ-GST is
subscribe-only for now; publishing via moqsink needs an encoder plus
request-pad muxing (a follow-up).

No moq-gst release has been cut yet, so the cell currently marks itself
broken ("no moq-gst-v* release found") and fails only its own cells, like
the Go cell -- the red is the signal. The interop itself is validated:
built from source and pointed at via the new MOQ_GST_PLUGIN_DIR override,
moqsrc reads a rust-published H.264 broadcast end-to-end. The cell flips
green automatically once the first release ships.

Wires it into CI (system gstreamer on every runner + gst in the
subscriber list), the freshness policy (moq-gst resolved at latest
release), the justfile (gst in `just full`), and the README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 4, 2026

Warning

Review limit reached

@kixelated, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 44 minutes and 49 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b63f35da-3b22-40b4-b71d-08d05b37eeb7

📥 Commits

Reviewing files that changed from the base of the PR and between eddae69 and 5c542d3.

📒 Files selected for processing (5)
  • .github/workflows/smoke.yml
  • README.md
  • freshness.sh
  • justfile
  • smoke.sh
✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch gst-subscribe-smoke

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@kixelated kixelated merged commit 10e3cbd into main Jun 4, 2026
0 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant