diff --git a/infra/pub.yml.tpl b/infra/pub.yml.tpl
index 5ff4f6b..10c1e8b 100644
--- a/infra/pub.yml.tpl
+++ b/infra/pub.yml.tpl
@@ -97,5 +97,5 @@ write_files:
runcmd:
- systemctl daemon-reload
- systemctl restart docker
- - systemctl start moq-bbb moq-clock
+ - systemctl start hang-bbb moq-clock
- systemctl start watchtower
diff --git a/src/components/watch.tsx b/src/components/watch.tsx
index bbfd79e..ab3d620 100644
--- a/src/components/watch.tsx
+++ b/src/components/watch.tsx
@@ -6,7 +6,7 @@ export default function (props: { name: string }) {
const url = new URL(
`${import.meta.env.PUBLIC_RELAY_SCHEME}://${import.meta.env.PUBLIC_RELAY_HOST}/demo/${props.name}.hang`,
);
- const canvas = ;
+ const canvas = ;
const watch = new Watch({
connection: {
@@ -32,6 +32,7 @@ export default function (props: { name: string }) {
Try out the demo! [Watch](/watch/bbb) or [Publish](/publish) a broadcast
**NOTE**: This website uses a [fork](/blog/transfork) of the IETF drafts called [moq-lite](https://github.com/kixelated/moq/tree/main/rs/moq) and [hang](https://github.com/kixelated/moq/tree/main/rs/hang). -The principles and rationale behind MoQ are great, but progress is painfully slow as it's an experimental protocol designed by committee. -My goal is to build something now that you can use, even if it's not a *standard*. +The principles behind MoQ are fantastic, but progress has been slow; it's an experimental protocol being developed by committee. +My goal is to build something now that you can use, even if it's not a *standard* yet. ### Features @@ -34,9 +33,10 @@ Check out the [blog](/blog) for more information. They give a good chuckle if I do say so myself. Once you're ready to dive in, check out the [Github](https://github.com/kixelated/moq) and/or join [Discord](https://discord.gg/FCYF3p99mr). -Contributions are welcome of course, but feel free to just yoink the code make it your own. -And if you're using some flavor of MoQ in the wild, I'd love to hear about it! +Contributions are welcome, of course. +But also feel free to just yoink the code, fork it, and make it your own. +If you're using some flavor of MoQ in the wild, I'd love to hear about it! My DMs are always open as `@kixelated` on Discord.  \ No newline at end of file diff --git a/src/pages/issues.mdx b/src/pages/issues.mdx index 323bca6..14b1cf2 100644 --- a/src/pages/issues.mdx +++ b/src/pages/issues.mdx @@ -5,10 +5,10 @@ title: Issues # Issues -Yeah so there's a lot of work to do. +Yeah, so there's a lot of work to do. Because we've broken out of the WebRTC jail, we need to implement a lot of things that are taken for granted. -If you want full control over the media stack so you can do cool shit, then welcome, you're in the right place. +If you want full control over the media stack so you can build cool shit, then welcome, you're in the right place. But if you just want a Google Meet clone and want to do minimal work, then check out [Pion](https://github.com/pion/webrtc). This page is a summary of the major issues, updated periodically. @@ -43,7 +43,7 @@ Now on to the issues. | name | description | | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Adaptive Bitrate | Currently, the bitrate for a broadcast is fixed at creation time. We need to implement back-pressure so the broadcaster lowers its bitrate during congestion. In addition, we could use simulcast to create multiple tracks allowing the viewer to choose what to receive. | -| Echo Cancelation | People who use speakers are the worst. But for real we need some form of echo cancelation otherwise conferencing is difficult. It seems like you can specify it [when capturing media](https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/echoCancellation) but I've yet to test how well it works. | +| Echo Cancellation | People who use speakers are the worst. But seriously, we need some form of echo cancelation otherwise conferencing is difficult. It seems like you can specify it [when capturing media](https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/echoCancellation) but I've yet to test how well it works. | | OBS Plugin | We should develop an [OBS](https://obsproject.com/) plugin to make it easier to publish broadcasts. The gstreamer plugin should also be improved but it mostly works. | | Viewer Feedback | Currently, viewers don't provide any feedback to the broadcaster(s). This would be very useful for small broadcasts for stuff like negotiating codecs, bitrates, etc. | @@ -56,6 +56,6 @@ Now on to the issues. | Chat | I want to implement a chat protocol over MoQ! | And of course, there's a million other things. -Hit me up on [Discord](https://discord.gg/FCYF3p99mr) if want to volunteer your time or monies to help make these a reality. +Hit me up on [Discord](https://discord.gg/FCYF3p99mr) if you want to volunteer your time or monies to help make these a reality.  \ No newline at end of file diff --git a/src/pages/source.mdx b/src/pages/source.mdx index cf09cc7..9830c15 100644 --- a/src/pages/source.mdx +++ b/src/pages/source.mdx @@ -7,7 +7,7 @@ title: Source Everything is open source and broken into two repositories: -- [kixelated/moq](https://github.com/kixelated/moq-rs): The underlying MoQ library in both Rust and Typescript. +- [kixelated/moq](https://github.com/kixelated/moq): The core MoQ library, with implementations in Rust and Typescript. - [kixelated/quic.video](https://github.com/kixelated/quic.video): This website. Includes terraform to run multiple relays on GCP. ## Rust @@ -15,13 +15,13 @@ Native code is written in [Rust](https://github.com/kixelated/moq/tree/main/rs) | crate | description | | ----------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| [moq-lite](https://docs.rs/moq-lite/latest/moq_lite/) | A generic pub/sub transport. This is a minimal reintepretation of the IETF [MoqTransport draft](https://datatracker.ietf.org/doc/draft-ietf-moq-transport/). | -| [moq-relay](https://github.com/kixelated/moq/tree/main/rs/moq-relay) | A Moq server that connects publishers to subscribers, caching and deduplicating any subscriptions. Note that MoQ does not support P2P; instead it utilizies relays to scale out to many subscribers. | -| [moq-clock](https://github.com/kixelated/moq/tree/main/rs/moq-clock) | It's a clock! Just to demonstate that MoQ can be used for more than media. | +| [moq-lite](https://docs.rs/moq-lite/latest/moq_lite/) | A generic pub/sub transport. This is a minimal reinterpretation of the IETF [MoqTransport draft](https://datatracker.ietf.org/doc/draft-ietf-moq-transport/). | +| [moq-relay](https://github.com/kixelated/moq/tree/main/rs/moq-relay) | A Moq server that connects publishers to subscribers, caching and deduplicating any subscriptions. Note that MoQ does not support P2P; instead it utilizes relays to scale out to many subscribers. | +| [moq-clock](https://github.com/kixelated/moq/tree/main/rs/moq-clock) | It's a clock! Just to demonstrate that MoQ can be used for more than media. | | [hang](https://docs.rs/hang/latest/hang/) | A media specific library built on top of moq-lite. This provides a JSON "catalog" that describes the media tracks and "container" that literally consists of a timestamp. The actual media decoding/encoding is left to the platform. | -| [hang-cli](https://github.com/kixelated/moq/tree/main/hang-cli) | A client that integrates with ffmpeg to publish media. This uses fMP4 via stdin so it's not the most efficient... | -| [hang-gst](https://github.com/kixelated/moq/tree/main/hang-gst) | A gstreamer plugin for publishing and consuming media. It works but needs a lot of polish. | -| [hang-wasm](https://github.com/kixelated/moq/tree/main/hang-wasm) | An MoQ client utilizing WebAssembly, WebCodecs, and WebTransport for web support. Deprecated in favor of the Typescript implementation; see below for justification. | +| [hang-cli](https://github.com/kixelated/moq/tree/main/hang-cli) | A client that integrates with ffmpeg to publish media. This pipes fMP4 over stdin, so it's not the most efficient... | +| [hang-gst](https://github.com/kixelated/moq/tree/main/hang-gst) | A gstreamer plugin for publishing and consuming media. It works, but needs a lot of polish. | +| [hang-wasm](https://github.com/kixelated/moq/tree/main/hang-wasm) | An MoQ web client utilizing WebAssembly, WebCodecs, and WebTransport. Deprecated in favor of the Typescript implementation; see below for justification. | There are some additional crates in other repositories that might be of interest: @@ -42,10 +42,10 @@ Web code is written in [Typescript](https://github.com/kixelated/moq/tree/main/j | [@kixelated/moq](https://www.npmjs.com/package/@kixelated/moq) | A moq-lite client that mirrors the Rust API. You can publish and subscribe to generic tracks. Any media stuff is implemented at a higher layer. | | [@kixelated/hang](https://www.npmjs.com/package/@kixelated/hang) | A media library. This is where the bulk of the cool stuff happens, like capturing/encoding or decoding/rendering media. Includes Web Components to make setup super simple. [See the demos](https://github.com/kixelated/moq/tree/main/js/hang/demo). | -**Note**: These utilize browser-specific APIs and there's no (explicit) support for Node and other server runtimes. +**Note**: These utilize browser-specific APIs and there's no currently no support for Node and other server runtimes. [Deno](https://deno.com/) is doing some cool stuff with WebTransport so maybe it'll work there someday. -And before you ask, yes, it is possible to use WASM for web support as evidenced by the [hang-wasm](https://github.com/kixelated/moq/tree/main/hang-wasm) crate. +And before you ask, yes, it is possible to use WASM for web support as demonstrated by the [hang-wasm](https://github.com/kixelated/moq/tree/main/hang-wasm) crate. However, it involves a lot of boilerplate, wrappers, and casting. The performance is not great because the WASM sandbox doesn't have networking or device access, requiring copying and/or message passing to use Web APIs.