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
35 changes: 21 additions & 14 deletions lib/ex_rtmp/message.ex
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ defmodule ExRTMP.Message do

require Logger

alias __MODULE__.Command.Generic
alias __MODULE__.Command.NetConnection.{Connect, CreateStream, Response}
alias __MODULE__.Command.NetStream.{DeleteStream, FCPublish, OnStatus, Play, Publish}
alias __MODULE__.Metadata
Expand Down Expand Up @@ -245,16 +246,6 @@ defmodule ExRTMP.Message do
%CreateStream{transaction_id: transaction_id}
end

defp handle_message_payload([result, transaction_id, command_object, data])
when result in ["_result", "_error"] do
%Response{
result: result,
transaction_id: trunc(transaction_id),
command_object: command_object,
data: data
}
end

defp handle_message_payload(["publish", _txid, nil, name, type]), do: Publish.new(name, type)
defp handle_message_payload(["onStatus", _txid, nil, info]), do: %OnStatus{info: info}

Expand All @@ -270,11 +261,27 @@ defmodule ExRTMP.Message do
Play.new(name, play_opts)
end

defp handle_message_payload(["deleteStream", _txid, nil, stream_id]),
do: DeleteStream.new(stream_id)
defp handle_message_payload(["deleteStream", _txid, nil, stream_id]) do
DeleteStream.new(stream_id)
end

defp handle_message_payload(["FCPublish", transaction_id, nil, name]) do
FCPublish.new(transaction_id, name)
end

defp handle_message_payload([result, transaction_id, command_object, data])
when result in ["_result", "_error"] do
%Response{
result: result,
transaction_id: trunc(transaction_id),
command_object: command_object,
data: data
}
end

defp handle_message_payload(["FCPublish", transaction_id, nil, name]),
do: FCPublish.new(transaction_id, name)
defp handle_message_payload([name, transaction_id, nil, params]) when is_binary(name) do
Generic.new(name, transaction_id, params)
end

defp handle_message_payload(other) do
Logger.warning("Unknown command: #{inspect(other)}")
Expand Down
19 changes: 19 additions & 0 deletions lib/ex_rtmp/message/command/generic.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
defmodule ExRTMP.Message.Command.Generic do
@moduledoc false

# This module describe OPTIONAL command message that can be safely ignored. If
# some service requires to handle/send these messages, we'll implement them.

@type t :: %__MODULE__{
name: String.t(),
transaction_id: number(),
params: term()
}

defstruct [:name, :transaction_id, :params]

@spec new(String.t(), number(), term()) :: t()
def new(name, transaction_id, params) do
%__MODULE__{transaction_id: transaction_id, name: name, params: params}
end
end
6 changes: 5 additions & 1 deletion lib/ex_rtmp/server/client_session.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ defmodule ExRTMP.Server.ClientSession do
alias ExRTMP.ChunkParser
alias ExRTMP.Client.MediaProcessor
alias ExRTMP.Message
alias ExRTMP.Message.Command.NetConnection
alias ExRTMP.Message.Command.{Generic, NetConnection}
alias ExRTMP.Message.Command.NetConnection.{CreateStream, Response}
alias ExRTMP.Message.Command.NetStream.{DeleteStream, FCPublish, OnStatus, Play, Publish}
alias ExRTMP.Message.Metadata
Expand Down Expand Up @@ -278,6 +278,10 @@ defmodule ExRTMP.Server.ClientSession do
%Play{} ->
handle_play_message(message.payload, message.stream_id, state)

%Generic{} ->
Logger.debug("Ignore generic message: #{inspect(message.payload)}")
{[], state}

_other ->
Logger.warning("Unknown command message: #{inspect(message.payload)}")
{[], state}
Expand Down