Skip to content

Commit 6fc9f9a

Browse files
Add a moqbs blog post. (#77)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 045315a commit 6fc9f9a

4 files changed

Lines changed: 107 additions & 0 deletions

File tree

public/blog/moqbs/moqbs.png

30.4 KB
Loading

public/blog/moqbs/settings.png

87 KB
Loading

public/blog/moqbs/watch.png

754 KB
Loading

src/pages/blog/moqbs.mdx

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
layout: "@/layouts/global.astro"
3+
title: "libmoq + OBS = MoQBS"
4+
author: kixelated
5+
description: First class support for MoQ in OBS... via a fork. Go forth and integrate libmoq into all of your favorite tools still using C for some reason.
6+
cover: "/blog/moqbs/moqbs.png"
7+
date: 2026-02-20
8+
---
9+
10+
# libmoq + OBS = MoQBS
11+
Oh hey, long time no chat.
12+
13+
As part of the [Montevideo Tech Summer Camp](/blog/monte-video), we worked on an OBS plugin.
14+
I'm here to announce the culmination of that effort... a *temporary* fork of OBS.
15+
16+
<figure>
17+
![MoQBS](/blog/moqbs/moqbs.png)
18+
<figcaption>I drew the logo myself. At least you know it's not AI generated.</figcaption>
19+
</figure>
20+
21+
## How Do Download?
22+
If you want to build it yourself:
23+
```bash
24+
git clone https://github.com/moq-dev/moqbs
25+
cd moqbs
26+
cmake --preset=macos
27+
cmake --build --preset=macos
28+
# Idk I think that's all you need.
29+
```
30+
31+
If you're lazy and want to use pre-built binaries:
32+
- [Mac (ARM)](https://obs.moq.dev/macos/arm64/32.1.0-rc1-35-g98607152d-9860715/moqbs-macos-arm64.dmg)
33+
- [Mac (Intel)](https://obs.moq.dev/macos/x86_64/32.1.0-rc1-35-g98607152d-9860715/moqbs-macos-x86_64.dmg)
34+
- [Linux (x86_64)](https://obs.moq.dev/linux/x86_64/32.1.0-rc1-35-g98607152d-9860715/moqbs-linux-x86_64.deb)
35+
- [Windows (x64)](https://obs.moq.dev/windows/x64/32.0.4-9860715/moqbs-windows-x64.zip)
36+
37+
Claude built these so no promises.
38+
I'm not going to set up a proper CI/CD pipeline because we want to delete this fork as soon as possible.
39+
40+
## Why Do Fork?
41+
The [MoQ OBS plugin](https://github.com/moq-dev/obs) does work with stable OBS... but it's not exposed via the UI.
42+
43+
Seriously, we had to fork OBS just to add a "MoQ" dropdown to the UI.
44+
Go +1 [this PR](https://github.com/obsproject/obs-studio/pull/12911) so the UI becomes dynamic.
45+
Then we can delete the abomination that is `MoQBS`.
46+
47+
## How Do Use?
48+
You can publish to any `moq-relay` server:
49+
- `https://cdn.moq.dev/anon`
50+
- `https://draft-14.cloudflare.mediaoverquic.com`
51+
- `https://localhost:4443/anon` (when using `just dev`)
52+
53+
<figure>
54+
![Settings Page](/blog/moqbs/settings.png)
55+
<figcaption>Open up the OBS settings. Change `test` to a unique broadcast name and remember that this endpoint is **PUBLIC**.</figcaption>
56+
</figure>
57+
58+
And you can watch from any `moq-relay` server too.
59+
I literally tested this for the first time ever just to take a screenshot.
60+
Huge shoutout to [pangaea](https://github.com/davegullo) and [Claude](https://claude.ai/code) for coding this beast.
61+
62+
<figure>
63+
![Watch Page](/blog/moqbs/watch.png)
64+
<figcaption>Wow it actually works. Note that you won't need the `?jwt` token for the `/anon` endpoint. I'm just lazy and used the `bbb` demo.</figcaption>
65+
</figure>
66+
67+
## What Do Support?
68+
- Codecs: H.264, H.265, OPUS, AAC, AV1
69+
- Transport: [QUIC](https://doc.moq.dev/concept/layer/quic.html), [WebTransport](https://doc.moq.dev/concept/layer/web-transport.html), [WebSocket](https://doc.moq.dev/concept/layer/web-socket.html)
70+
- Versions: [moq-lite](https://doc.moq.dev/concept/layer/moq-lite.html), [moq-transport](https://doc.moq.dev/concept/standard/moq-transport.html) (14+)
71+
- Format: [hang](https://doc.moq.dev/concept/layer/hang.html), CMAF (soon™)
72+
73+
## How Do Work?
74+
If you ever see me writing a C++ implementation of MoQ, shoot.
75+
It's not the real `@kixelated`.
76+
77+
That's why we created [libmoq](https://docs.rs/libmoq/latest/moq/) instead.
78+
It's a C binding on top of the Rust library providing both publish and subscribe functionality.
79+
It basically converts `async` Rust code into a bunch of C callbacks.
80+
81+
You can [download the latest](https://github.com/moq-dev/moq/releases) version if you want to give it a try yourself.
82+
The gross async networking stuff is handled by Rust+Tokio in a separate thread, dramatically simplifying the API.
83+
It's a static library so hopefully it just works™.
84+
85+
## What Do Next?
86+
Go forth and use `libmoq` in all of your favorite tools still using C for some reason.
87+
The current API is media-specific, but we're going to add support for generic tracks too.
88+
89+
[Software Mansion](https://swmansion.com/) just started on native iOS/Android support for MoQ using libmoq.
90+
It took them a day to get [playback working on iOS](https://discord.com/channels/1124083992740761730/1124083992740761733/1473997800273608744).
91+
Go pay them if you're a big corpo using React Native... or wait until it's open source.
92+
93+
There's also an [ffmpeg fork](https://github.com/brianmed/FFmpeg/tree/feature/moq-integration) if forking OBS was not good enough.
94+
Unfortunately, ffmpeg doesn't have a plugin system so you're stuck with a fork.
95+
96+
If you're bored, vibe code a binding for your favorite language/platform/application and we'll throw it into the `moq-dev` organization.
97+
Bonus points for VLC.
98+
99+
## Who Do Did?
100+
Again a huge shoutout to [pangaea](https://github.com/davegullo), [bpmedley](https://github.com/brianmed), [emilsas](https://github.com/emilsas), and everyone from [Qualabs](https://qualabs.com/) for all of their hard work.
101+
It feels great delegating the hard parts to others.
102+
103+
I could get used to this.
104+
105+
Written by [@kixelated](https://github.com/kixelated).
106+
107+
![@kixelated](/blog/avatar.png)

0 commit comments

Comments
 (0)