Packages
membrane_rtc_engine
0.12.1
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Membrane RTC Engine and its client library
Current section
Files
Jump to
Current section
Files
lib/membrane_rtc_engine/endpoint.ex
defmodule Membrane.RTC.Engine.Endpoint do
@moduledoc false
use Bunch.Access
alias Membrane.RTC.Engine.Track
@type id() :: any()
@type t :: %__MODULE__{
id: id(),
inbound_tracks: %{Track.id() => Track.t()}
}
defstruct id: nil, inbound_tracks: %{}
@spec new(id :: id(), inbound_tracks :: [Track.t()]) :: t()
def new(id, inbound_tracks) do
inbound_tracks = Map.new(inbound_tracks, &{&1.id, &1})
%__MODULE__{id: id, inbound_tracks: inbound_tracks}
end
@spec get_audio_tracks(endpoint :: t()) :: [Track.t()]
def get_audio_tracks(endpoint),
do: Map.values(endpoint.inbound_tracks) |> Enum.filter(&(&1.type == :audio))
@spec get_video_tracks(endpoint :: t()) :: [Track.t()]
def get_video_tracks(endpoint),
do: Map.values(endpoint.inbound_tracks) |> Enum.filter(&(&1.type == :video))
@spec get_track_by_id(endpoint :: t(), id :: Track.id()) :: Track.t() | nil
def get_track_by_id(endpoint, id), do: endpoint.inbound_tracks[id]
@spec get_tracks(endpoint :: t()) :: [Track.t()]
def get_tracks(endpoint), do: Map.values(endpoint.inbound_tracks)
@spec update_track_metadata(endpoint :: t(), track_id :: Track.id(), metadata :: any()) :: t()
def update_track_metadata(endpoint, track_id, metadata),
do:
update_in(endpoint, [:inbound_tracks, track_id, :metadata], fn _old_metadata -> metadata end)
@spec get_active_track_metadata(endpoint :: t()) :: %{Track.id() => any}
def get_active_track_metadata(%__MODULE__{} = endpoint),
do:
endpoint.inbound_tracks
|> Map.values()
|> Enum.filter(& &1.active?)
|> Map.new(&{&1.id, &1.metadata})
def get_active_track_metadata(_endpoint), do: %{}
@spec update_track_encoding(endpoint :: t(), track_id :: Track.id(), encoding :: atom) :: t()
def update_track_encoding(endpoint, track_id, value),
do: update_in(endpoint.inbound_tracks[track_id], &%Track{&1 | encoding: value})
end