MOQX.Catalog (moqx v0.6.1)

Copy Markdown View Source

Decodes CMSF catalog payloads and provides track discovery helpers.

A CMSF catalog is a UTF-8 JSON payload retrieved via MOQX.Helpers.fetch_catalog/2. This module parses those raw bytes into an inspectable Elixir structure.

Example

{:ok, ref} = MOQX.Helpers.fetch_catalog(subscriber, namespace: "moqtail")
{:ok, catalog} = MOQX.Helpers.await_catalog(ref, 5_000)

catalog
|> MOQX.Catalog.video_tracks()
|> Enum.map(& &1.name)
#=> ["259", "260", "261"]

The raw field on both MOQX.Catalog and MOQX.Catalog.Track preserves the original JSON map for forward compatibility with fields not yet modeled as struct keys.

Summary

Functions

Returns all audio tracks.

Decodes a raw CMSF catalog binary into a %MOQX.Catalog{}.

Bang variant of decode/1. Raises on invalid input.

Finds a track by exact name. Returns nil if not found.

Returns all tracks in the catalog.

Returns tracks matching the given role string (e.g. "video", "audio").

Returns all video tracks.

Types

t()

@type t() :: %MOQX.Catalog{
  raw: map(),
  supports_delta_updates: boolean() | nil,
  tracks: [MOQX.Catalog.Track.t()],
  version: integer() | nil
}

Functions

audio_tracks(catalog)

@spec audio_tracks(t()) :: [MOQX.Catalog.Track.t()]

Returns all audio tracks.

decode(binary)

@spec decode(binary()) :: {:ok, t()} | {:error, String.t()}

Decodes a raw CMSF catalog binary into a %MOQX.Catalog{}.

Accepts the raw bytes delivered by {:moqx_fetch_object, ...} messages. Returns {:ok, catalog} on success or {:error, reason} on failure.

Example

{:ok, catalog} = MOQX.Catalog.decode(payload)
MOQX.Catalog.video_tracks(catalog)

decode!(binary)

@spec decode!(binary()) :: t()

Bang variant of decode/1. Raises on invalid input.

get_track(catalog, name)

@spec get_track(t(), String.t()) :: MOQX.Catalog.Track.t() | nil

Finds a track by exact name. Returns nil if not found.

tracks(catalog)

@spec tracks(t()) :: [MOQX.Catalog.Track.t()]

Returns all tracks in the catalog.

tracks_by_role(catalog, role)

@spec tracks_by_role(t(), String.t()) :: [MOQX.Catalog.Track.t()]

Returns tracks matching the given role string (e.g. "video", "audio").

video_tracks(catalog)

@spec video_tracks(t()) :: [MOQX.Catalog.Track.t()]

Returns all video tracks.