3.4 KiB
Media over QUIC (MoQ) is a live media delivery protocol utilizing QUIC streams. See quic.video for more information.
This repository contains a few crates:
- moq-relay: A relay server, accepting content from publishers and fanning it out to subscribers.
- moq-pub: A publish client, accepting media from stdin (ex. via ffmpeg) and sending it to a remote server.
- moq-transport: An async implementation of the underlying MoQ protocol.
- moq-api: A HTTP API server that stores the origin for each broadcast, backed by redis.
- moq-clock: A dumb clock client/server just to prove MoQ is more than media.
There's currently no way to view media with this repo; you'll need to use moq-js for that.
Development
Launch backend containers (including two relays, API and a Redis instance) using docker-compose:
make run
As well as launching the containers, this handles the creation and transfer of TLS certificates.
Then, visit https://quic.video/publish/?server=localhost:4443.
Alternatively, use the dev helper scripts.
Usage
moq-relay
moq-relay is a server that forwards subscriptions from publishers to subscribers, caching and deduplicating along the way. It's designed to be run in a datacenter, relaying media across multiple hops to deduplicate and improve QoS. The relays register themselves via the moq-api endpoints, which is used to discover other relays and share broadcasts.
Notable arguments:
--listen <ADDR>
Listen on this address, default:[::]:4443
--tls-cert <CERT>
Use the certificate file at this path--tls-key <KEY>
Use the private key at this path--dev
Listen via HTTPS as well, serving the/fingerprint
of the self-signed certificate. (dev only)
This listens for WebTransport connections on UDP https://localhost:4443
by default.
You need a client to connect to that address, to both publish and consume media.
moq-pub
This is a client that publishes a fMP4 stream from stdin over MoQ. This can be combined with ffmpeg (and other tools) to produce a live stream.
Notable arguments:
<URL>
connect to the given address, which must start withhttps://
for WebTransport.
NOTE: We're very particular about the fMP4 ingested. See this script for the required ffmpeg flags.
moq-transport
A media-agnostic library used by moq-relay and moq-pub to serve the underlying subscriptions. It has caching/deduplication built-in, so your application is oblivious to the number of connections under the hood.
See the published crate and documentation.
moq-api
This is a API server that exposes a REST API. It's used by relays to inserts themselves as origins when publishing, and to find the origin when subscribing. It's basically just a thin wrapper around redis that is only needed to run multiple relays in a (simple) cluster.
License
Licensed under either:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)