Skip to content

feat(moq-cli): wire verbatim MPEG-TS carriage (mpegts catalog) through publish/subscribe #1835

Description

@t0ms

Summary

#1815 landed generic verbatim MPEG-TS carriage in the moq-mux library (the mpegts
catalog section + per-PID verbatim tracks), but listed CLI wiring as out of scope.
Today moq-cli still uses the media-only Catalog<()> path, so SCTE-35 / teletext /
DVB AC-3 / private streams are dropped when you go through moq pub | relay | moq sub.
This issue wires the Ext (mpegts) catalog through the CLI so a contribution TS feed
keeps its ancillary streams end-to-end. Part of #1799.

Why

This is the only thing standing between the merged #1815 carriage and being able to
actually exercise it from the CLI. Without it the verbatim lane is library-only.

Changes (the library is already generic; this just selects Ext)

  • rs/moq-cli/src/publish.rs: in the PublishFormat::Ts arm build a
    moq_mux::catalog::Producer::<moq_mux::container::ts::catalog::Ext>::new(..) and a
    ts::Import over it; change PublishDecoder::Ts to hold
    ts::Import<moq_mux::container::ts::catalog::Ext>. (The other formats keep ().)
  • rs/moq-cli/src/subscribe.rs::run_ts: use ts::Export::with_ts(self.broadcast, self.catalog)? instead of Export::with_catalog_format(..) (.with_latency chains).
  • Relay needs no change (it forwards the extra tracks + mpegts section transparently).

Acceptance criteria

  • moq-cli publish ts | relay | moq-cli subscribe --format ts preserves the undecoded
    streams (SCTE-35 section PIDs, teletext/AC-3 PES) with original PIDs, PMT descriptors,
    and PES stream_ids, matching the feat(moq-mux): generic verbatim MPEG-TS carriage (mpegts catalog section) #1815 library round-trip.
  • A round-trip integration test over a fixture with at least one verbatim PES and one
    section PID.

Out of scope

Branch

main (additive CLI usage; the moq-mux API already merged to main).
(Written by Claude)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions