moq-net
The networking layer for Media over QUIC in Python: real-time pub/sub with built-in caching, fan-out, and prioritization, on top of QUIC.
moq-net wraps the auto-generated moq-ffi bindings with a Pythonic API: no Moq prefixes, async iterators, context managers, and simplified connection setup. At session setup it negotiates either the moq-lite or moq-transport wire protocol.
Installation
pip install moq-net
Quick Start
Subscribe to a stream
import asyncio
import moq_net as moq
async def main():
async with moq.Client("https://relay.quic.video") as client:
async for announcement in client.announced():
catalog = await announcement.broadcast.catalog()
for name in catalog.audio:
async for frame in announcement.broadcast.subscribe_media(name):
print(f"Got frame: {len(frame.payload)} bytes, ts={frame.timestamp_us}")
asyncio.run(main())
Publish a stream
import asyncio
import moq_net as moq
async def main():
async with moq.Client("https://relay.quic.video") as client:
broadcast = moq.BroadcastProducer()
# Publish an Opus audio track (init bytes from your encoder)
audio = broadcast.publish_media("opus", opus_init_bytes)
client.publish("my-stream", broadcast)
# Write frames
audio.write_frame(payload, timestamp_us=0)
audio.write_frame(payload, timestamp_us=20000)
# Clean up
audio.finish()
broadcast.finish()
asyncio.run(main())
Advanced: Manual origin wiring
For full control over the origin topology:
import moq_net as moq
origin = moq.OriginProducer()
client = moq.Client(
"https://relay.quic.video",
publish=origin,
subscribe=origin,
)
API
Connection
Client(url, *, tls_verify=True, publish=None, subscribe=None)— async context manager for connecting to a relay
Publishing
BroadcastProducer()— create a broadcast to publish tracks into.publish_media(format, init) → MediaProducer.finish()
MediaProducer— write frames to a track.write_frame(payload, timestamp_us).finish()
Subscribing
BroadcastConsumer— subscribe to tracks within a broadcast.subscribe_catalog() → CatalogConsumer.subscribe_media(name, max_latency_ms=10000) → MediaConsumerawait .catalog() → Catalog(convenience)
CatalogConsumer— async iterator ofCatalogMediaConsumer— async iterator ofFrame
Origin (advanced)
OriginProducer()— manage broadcast announcements.consume() → OriginConsumer.publish(path, broadcast)
OriginConsumer— discover broadcasts.announced(prefix) → Announced(async iterator).announced_broadcast(path) → AnnouncedBroadcast(awaitable)
Types
Catalog—.audio: dict[str, Audio],.video: dict[str, Video],.display,.rotation,.flipFrame—.payload: bytes,.timestamp_us: int,.keyframe: boolAudio—.codec,.sample_rate,.channel_count,.bitrate,.descriptionVideo—.codec,.coded: Dimensions,.display_ratio,.bitrate,.framerate,.descriptionDimensions—.width: int,.height: int
See Also
- moq-ffi — raw UniFFI bindings (lower-level)
- MoQ project — full monorepo with Rust server, TypeScript browser lib, and more
Metadata
Release files for moq-net 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| moq_net-0.1.0.tar.gz | 9.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| moq_net-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.1 kB
Release files / moq_net-0.1.0.tar.gz
| Download URL | moq_net-0.1.0.tar.gz |
|---|---|
| Size | 9.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db3be2698559ade55647bfa510b63f38d4f9fa80e3c0c3b71f801d47147758a7
|
|
BLAKE2b-256 checksum How to use checksums |
ee2a2edb812e3af05e8b655baa9c6076c4afa7394b887dedbaad87048a071c79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / moq_net-0.1.0-py3-none-any.whl
| Download URL | moq_net-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a0e8f32d153372556fff3a67390af541c0d89d2cad7d4bde757c4164680f3f2
|
|
BLAKE2b-256 checksum How to use checksums |
1018803a2d7b6350c3e202bccaa99e73d52e7a9b18ed4e36b5e4f41d2ad5b288
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|