Skip to main content

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) → MediaConsumer
    • await .catalog() → Catalog (convenience)
  • CatalogConsumer — async iterator of Catalog
  • MediaConsumer — async iterator of Frame

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, .flip
  • Frame — .payload: bytes, .timestamp_us: int, .keyframe: bool
  • Audio — .codec, .sample_rate, .channel_count, .bitrate, .description
  • Video — .codec, .coded: Dimensions, .display_ratio, .bitrate, .framerate, .description
  • Dimensions — .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)

Source distribution for moq-net 0.1.0
File Size Uploaded
moq_net-0.1.0.tar.gz 9.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for moq-net 0.1.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page