MOQX.Debug (moqx v0.6.1)

Copy Markdown View Source

Debug helpers for inspecting raw MOQ frame payloads.

This module is intentionally low-level and focused on practical diagnostics, especially for MP4/CMAF payloads that include a top-level prft box (Producer Reference Time).

Summary

Types

Top-level ISO BMFF box descriptor.

Parsed PRFT fields.

Functions

Converts a 64-bit NTP timestamp to Unix epoch milliseconds.

Parses the first top-level prft box from a frame payload.

Estimates publisher age (ms) from the first top-level prft box.

Lists top-level ISO BMFF boxes in payload.

Types

box_info()

@type box_info() :: %{
  type: String.t(),
  size: pos_integer(),
  offset: non_neg_integer()
}

Top-level ISO BMFF box descriptor.

prft_info()

@type prft_info() :: %{
  version: 0 | 1,
  flags: non_neg_integer(),
  reference_track_id: non_neg_integer(),
  ntp_timestamp: non_neg_integer(),
  publisher_unix_ms: integer(),
  media_time: non_neg_integer()
}

Parsed PRFT fields.

Functions

ntp_to_unix_ms(ntp_timestamp)

@spec ntp_to_unix_ms(non_neg_integer()) :: integer()

Converts a 64-bit NTP timestamp to Unix epoch milliseconds.

parse_prft(payload)

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

Parses the first top-level prft box from a frame payload.

Returns {:ok, prft_info} or {:error, reason}.

publisher_age_ms(payload, now_ms \\ System.system_time(:millisecond))

@spec publisher_age_ms(binary(), integer()) ::
  {:ok, non_neg_integer()} | {:error, String.t()}

Estimates publisher age (ms) from the first top-level prft box.

This computes max(now_ms - publisher_unix_ms, 0).

top_level_boxes(payload)

@spec top_level_boxes(binary()) :: [box_info()]

Lists top-level ISO BMFF boxes in payload.

Returns best-effort parsed boxes and stops when encountering malformed or incomplete trailing data.