MoQ is under active development. APIs will change, but we keep backwards wire compatibility.

Skip to content

SRT ​

moq import srt accepts SRT pushes (--listen) or pulls from a remote SRT source (--connect); moq export srt serves SRT to players or pushes to a remote. The payload is MPEG-TS, so the same codecs as import ts apply: H.264/H.265 video and AAC, MP2, AC-3, or E-AC-3 audio. Ingest logs the same per-stream lines as import ts, under an srt{path=...} span: an elementary stream that stopped delivering access units, audio frame sync lost, damaged units refused on each PID, and the TR 101 290 counters when one moves. They grade the TS as SRT delivered it, after retransmission. Damage drops that unit and keeps the session alive; video closes its group at the break and resumes at its next keyframe, freezing for up to one GOP.

bash
# Accept a contribution feed and publish it
moq --connect https://relay.example.com/anon --broadcast event.hang import srt --listen '[::]:9000'

# Serve a broadcast to SRT players
moq --connect https://relay.example.com/anon --broadcast event.hang export srt --listen '[::]:9000'
ffplay srt://localhost:9000

# Pull from a remote encoder
moq --connect https://relay.example.com/anon --broadcast event.hang import srt --connect 'srt://encoder.example.com:9000?streamid=live/cam'

Import publishes the feed's own PTS and anchors the catalog clock on its first frame, as import ts does.

A multi-program feed is refused, as with import ts, unless --program picks one: --program 2 imports program 2 alone, and --program all publishes each program as its own broadcast (event.hang becomes event/1.hang, event/2.hang, and so on).

bash
moq --connect https://relay.example.com/anon --broadcast event.hang import srt --listen '[::]:9000' --program all

--latency sets the SRT receive buffer and doubles as the skip threshold on export. Export paces each SRT payload on the media clock, and re-anchors that pacing on a declared marker, so a restarted timeline plays out from the live edge instead of stalling until it catches up. A --connect URL needs a streamid query or a path; a listener bridges one --broadcast and ignores the stream id it is offered. The library is moq-srt.

Licensed under MIT or Apache-2.0