Packages
membrane_rtc_engine
0.5.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/media_event.ex
defmodule Membrane.RTC.Engine.MediaEvent do
@moduledoc false
alias Membrane.RTC.Engine.{Endpoint, Peer, Track}
@type t() :: map()
@spec peer_accepted(Peer.id(), map(), [Endpoint.t()]) :: t()
def peer_accepted(peer_id, peers, endpoints) do
peers =
Enum.map(peers, fn {id, peer} ->
track_id_to_track_metadata = Endpoint.get_active_track_metadata(endpoints[id])
%{id: id, metadata: peer.metadata, trackIdToMetadata: track_id_to_track_metadata}
end)
%{type: "peerAccepted", data: %{id: peer_id, peersInRoom: peers}}
end
@spec peer_denied(map()) :: t()
def peer_denied(metadata \\ %{}) do
%{type: "peerDenied", data: metadata}
end
@spec peer_joined(Peer.t()) :: t()
def peer_joined(%Peer{id: id, metadata: metadata}) do
%{type: "peerJoined", data: %{peer: %{id: id, metadata: metadata}}}
end
@spec peer_left(Peer.id()) :: t()
def peer_left(peer_id) do
%{type: "peerLeft", data: %{peerId: peer_id}}
end
@spec peer_updated(Peer.t()) :: t()
def peer_updated(peer) do
%{type: "peerUpdated", data: %{peerId: peer.id, metadata: peer.metadata}}
end
@spec peer_removed(Peer.id(), String.t()) :: t()
def peer_removed(peer_id, reason) do
%{type: "peerRemoved", data: %{peerId: peer_id, reason: reason}}
end
@spec tracks_added(Peer.id(), map()) :: t()
def tracks_added(peer_id, track_id_to_metadata) do
%{type: "tracksAdded", data: %{peerId: peer_id, trackIdToMetadata: track_id_to_metadata}}
end
@spec tracks_removed(Peer.id(), [String.t()]) :: t()
def tracks_removed(peer_id, track_ids) do
%{type: "tracksRemoved", data: %{peerId: peer_id, trackIds: track_ids}}
end
@spec track_updated(Peer.id(), String.t(), map()) :: t()
def track_updated(peer_id, track_id, metadata) do
%{type: "trackUpdated", data: %{peerId: peer_id, trackId: track_id, metadata: metadata}}
end
@spec tracks_priority([String.t()]) :: t()
def tracks_priority(tracks) do
%{type: "tracksPriority", data: %{tracks: tracks}}
end
@spec encoding_switched(Peer.id(), Track.id(), String.t()) :: t()
def encoding_switched(peer_id, track_id, encoding) do
%{type: "encodingSwitched", data: %{peerId: peer_id, trackId: track_id, encoding: encoding}}
end
@spec custom(map()) :: t()
def custom(msg) do
%{type: "custom", data: msg}
end
@spec create_error_event(String.t()) :: t()
def create_error_event(msg) do
%{type: "error", data: %{message: msg}}
end
@spec encode(t()) :: binary()
def encode(event), do: Jason.encode!(event)
@spec decode(binary()) :: {:ok, t()} | {:error, :invalid_media_event}
def decode(event_json) do
with {:ok, event_map} <- Jason.decode(event_json),
event_type = Map.get(event_map, "type"),
event_data = Map.get(event_map, "data"),
%{} = event <- decode(event_type, event_data) do
{:ok, event}
else
:error -> {:error, :invalid_media_event}
end
end
defp decode(event_type, event_data)
defp decode("join", %{"metadata" => metadata}), do: %{type: :join, data: %{metadata: metadata}}
defp decode("leave", _event_data), do: %{type: :leave}
defp decode("custom", data), do: %{type: :custom, data: data}
defp decode("updatePeerMetadata", %{"metadata" => metadata}),
do: %{type: :update_peer_metadata, data: %{metadata: metadata}}
defp decode("updateTrackMetadata", %{"trackId" => track_id, "trackMetadata" => metadata}),
do: %{type: :update_track_metadata, data: %{track_id: track_id, track_metadata: metadata}}
defp decode("selectEncoding", %{"peerId" => pid, "trackId" => tid, "encoding" => encoding}),
do: %{type: :select_encoding, data: %{peer_id: pid, track_id: tid, encoding: encoding}}
defp decode(_event_type, _event_data), do: :error
end