Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions lib/jellyfish/room.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ defmodule Jellyfish.Room do

alias Membrane.ICE.TURNManager
alias Membrane.RTC.Engine
alias Membrane.RTC.Engine.Track

alias Membrane.RTC.Engine.Message.{
EndpointAdded,
Expand Down Expand Up @@ -130,10 +129,10 @@ defmodule Jellyfish.Room do
GenServer.call(registry_id(room_id), {:remove_component, component_id})
end

@spec hls_subscribe(id(), [Track.id()]) ::
@spec hls_subscribe(id(), [Peer.id() | Component.id()]) ::
:ok | {:error, term()}
def hls_subscribe(room_id, tracks) do
GenServer.call(registry_id(room_id), {:hls_subscribe, tracks})
def hls_subscribe(room_id, origins) do
GenServer.call(registry_id(room_id), {:hls_subscribe, origins})
end

@spec receive_media_event(id(), Peer.id(), String.t()) :: :ok
Expand Down Expand Up @@ -305,13 +304,13 @@ defmodule Jellyfish.Room do
end

@impl true
def handle_call({:hls_subscribe, tracks}, _from, state) do
def handle_call({:hls_subscribe, origins}, _from, state) do
hls_component = hls_component(state)

reply =
case validate_hls_subscription(hls_component) do
:ok ->
Engine.message_endpoint(state.engine_pid, hls_component.id, {:subscribe, tracks})
Engine.message_endpoint(state.engine_pid, hls_component.id, {:subscribe, origins})

{:error, _reason} = error ->
error
Expand Down
22 changes: 5 additions & 17 deletions lib/jellyfish_web/api_spec/subscription.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,7 @@ defmodule JellyfishWeb.ApiSpec.Subscription do

alias OpenApiSpex.Schema

defmodule Track do
@moduledoc false

require OpenApiSpex

OpenApiSpex.schema(%{
title: "Track",
description: "Track id",
type: :string,
example: "track-1"
})
end

defmodule Tracks do
defmodule Origins do
@moduledoc false

require OpenApiSpex
Expand All @@ -26,10 +13,11 @@ defmodule JellyfishWeb.ApiSpec.Subscription do
description: "Subscription config",
type: :object,
properties: %{
tracks: %Schema{
origins: %Schema{
type: :array,
description: "List of tracks that hls endpoint will subscribe for",
items: Track
description:
"List of peers and components ids whose tracks the HLS endpoint will subscribe to",
items: %OpenApiSpex.Schema{type: :string}
}
}
})
Expand Down
10 changes: 5 additions & 5 deletions lib/jellyfish_web/controllers/subscription_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@ defmodule JellyfishWeb.SubscriptionController do
tags [:hls]

operation :create,
operation_id: "subscribe_tracks",
summary: "Subscribe hls component for tracks",
operation_id: "subscribe_hls_to",
summary: "Subscribe the HLS component to the tracks of peers or components",
parameters: [room_id: [in: :path, description: "Room ID", type: :string]],
request_body: {"Subscribe configuration", "application/json", ApiSpec.Subscription.Tracks},
request_body: {"Subscribe configuration", "application/json", ApiSpec.Subscription.Origins},
responses: [
created: %Response{description: "Tracks succesfully added."},
bad_request: ApiSpec.error("Invalid request structure"),
not_found: ApiSpec.error("Room doesn't exist")
]

def create(conn, %{"room_id" => room_id} = params) do
with tracks <- Map.get(params, "tracks", %{}),
with {:ok, origins} <- Map.fetch(params, "origins"),
{:ok, _room_pid} <- RoomService.find_room(room_id),
:ok <- Room.hls_subscribe(room_id, tracks) do
:ok <- Room.hls_subscribe(room_id, origins) do
send_resp(conn, :created, "Successfully subscribed for tracks")
else
:error ->
Expand Down
Loading