lib/jellyfish/component/rtsp.ex

defmodule Jellyfish.Component.RTSP do
  @moduledoc """
  Options for the RTSP component.

  For the description of these options refer to [Jellyfish
  documentation](https://jellyfish-dev.github.io/jellyfish-docs/getting_started/components/rtsp).
  """

  @behaviour Jellyfish.Component.Deserializer

  @enforce_keys [:source_uri]
  defstruct @enforce_keys ++
              [
                rtp_port: 20_000,
                reconnect_delay: 15_000,
                keep_alive_interval: 15_000,
                pierce_nat: true
              ]

  @type t :: %__MODULE__{
          source_uri: URI.t(),
          rtp_port: 1..65_535,
          reconnect_delay: non_neg_integer(),
          keep_alive_interval: non_neg_integer(),
          pierce_nat: boolean()
        }

  @impl true
  def properties_from_json(%{
        "sourceUri" => source_uri,
        "rtpPort" => rtp_port,
        "reconnectDelay" => reconnect_delay,
        "keepAliveInterval" => keep_alive_interval,
        "pierceNat" => pierce_nat
      }),
      do: %{
        source_uri: source_uri,
        rtp_port: rtp_port,
        reconnect_delay: reconnect_delay,
        keep_alive_interval: keep_alive_interval,
        pierce_nat: pierce_nat
      }
end