1
0
mirror of https://github.com/algora-io/tv.git synced 2025-03-17 20:17:45 +02:00
algora-tv/lib/algora/accounts/destination.ex
Zafer Cesur 9ac9b08176
add multistreaming support (#35)
* replace SourceBin with Source + Demuxer + Parser

* add Tee.Master

* update topology

* add copy channel

* reorganize spec

* fix pad refs

* dynamically update pipeline topology for each rtmp sink

* implement user defined destinations

* validate destination URL

* revamp ui

* remove dbg calls

* remove autocomplete for stream key input

* update validation message
2024-05-20 15:58:24 +03:00

46 lines
1.1 KiB
Elixir

defmodule Algora.Accounts.Destination do
use Ecto.Schema
import Ecto.Changeset
schema "destinations" do
field :rtmp_url, :string
field :stream_key, :string, redact: true
field :active, :boolean, default: true
belongs_to :user, Algora.Accounts.User
timestamps()
end
def changeset(destination, attrs) do
destination
|> cast(attrs, [:rtmp_url, :stream_key, :active])
|> validate_required([:rtmp_url, :stream_key])
|> validate_rtmp_url()
end
defp validate_rtmp_url(changeset) do
validate_change(changeset, :rtmp_url, fn :rtmp_url, rtmp_url ->
case valid_rtmp_url?(rtmp_url) do
:ok ->
[]
{:error, message} ->
[rtmp_url: message]
end
end)
end
defp valid_rtmp_url?(url) do
case URI.parse(url) do
%URI{scheme: scheme, host: host} when scheme in ["rtmp", "rtmps"] ->
case :inet.gethostbyname(to_charlist(host)) do
{:ok, _} -> :ok
{:error, _} -> {:error, "must be a valid URL"}
end
_ ->
{:error, "must be a valid URL starting with rtmp:// or rtmps://"}
end
end
end