Skip to content

Commit 47233fb

Browse files
authored
Handle FCPublish command (#8)
1 parent 34d2cf3 commit 47233fb

5 files changed

Lines changed: 44 additions & 11 deletions

File tree

lib/ex_rtmp/chunk.ex

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,8 @@ defmodule ExRTMP.Chunk do
5050
msg_stream_id =
5151
if chunk.message_stream_id, do: <<chunk.message_stream_id::integer-32-little>>, else: <<>>
5252

53-
[
54-
<<chunk.fmt::2, encode_stream_id(chunk.stream_id)::bitstring>>,
55-
timestamp,
56-
length,
57-
type_id,
58-
msg_stream_id,
59-
chunk.payload
60-
]
53+
<<chunk.fmt::2, encode_stream_id(chunk.stream_id)::bitstring, timestamp::binary,
54+
length::binary, type_id::binary, msg_stream_id::binary, chunk.payload::binary>>
6155
end
6256

6357
defp parse_stream_id(data) do

lib/ex_rtmp/message.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule ExRTMP.Message do
66
require Logger
77

88
alias __MODULE__.Command.NetConnection.{Connect, CreateStream, Response}
9-
alias __MODULE__.Command.NetStream.{DeleteStream, OnStatus, Play, Publish}
9+
alias __MODULE__.Command.NetStream.{DeleteStream, FCPublish, OnStatus, Play, Publish}
1010
alias __MODULE__.Metadata
1111
alias __MODULE__.UserControl.Event
1212
alias ExRTMP.Chunk
@@ -239,6 +239,9 @@ defmodule ExRTMP.Message do
239239
["publish", transaction_id, nil, name, type] ->
240240
Publish.new(transaction_id, name, type)
241241

242+
["FCPublish", transaction_id, nil, name] ->
243+
FCPublish.new(transaction_id, name)
244+
242245
["deleteStream", transaction_id, nil, stream_id] ->
243246
DeleteStream.new(transaction_id, stream_id)
244247

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
defmodule ExRTMP.Message.Command.NetStream.FCPublish do
2+
@moduledoc """
3+
Struct representing an "FCPublish" command message for RTMP NetStream.
4+
"""
5+
6+
@type t :: %__MODULE__{
7+
transaction_id: number(),
8+
name: String.t()
9+
}
10+
11+
defstruct [:transaction_id, :name]
12+
13+
@spec new(number(), String.t()) :: t()
14+
def new(transaction_id, name) do
15+
%__MODULE__{transaction_id: transaction_id, name: name}
16+
end
17+
18+
defimpl ExRTMP.Message.Serializer do
19+
alias ExRTMP.AMF0
20+
21+
def serialize(publish) do
22+
IO.iodata_to_binary([
23+
AMF0.serialize("FCPublish"),
24+
AMF0.serialize(publish.transaction_id),
25+
AMF0.serialize(nil),
26+
AMF0.serialize(publish.name)
27+
])
28+
end
29+
end
30+
end

lib/ex_rtmp/message/command/net_stream/publish.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
defmodule ExRTMP.Message.Command.NetStream.Publish do
2-
@moduledoc false
2+
@moduledoc """
3+
Struct representing a "publish" command message for RTMP NetStream.
4+
"""
35

46
@type publishing_type :: :live | :record | :append
57

lib/ex_rtmp/server/client_session.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ defmodule ExRTMP.Server.ClientSession do
1212
alias ExRTMP.Message
1313
alias ExRTMP.Message.Command.NetConnection
1414
alias ExRTMP.Message.Command.NetConnection.{CreateStream, Response}
15-
alias ExRTMP.Message.Command.NetStream.{DeleteStream, Play, Publish, OnStatus}
15+
alias ExRTMP.Message.Command.NetStream.{DeleteStream, FCPublish, Play, Publish, OnStatus}
1616
alias ExRTMP.Message.Metadata
1717

1818
@default_acknowledgement_size 3_000_000
@@ -237,6 +237,10 @@ defmodule ExRTMP.Server.ClientSession do
237237
%CreateStream{} ->
238238
handle_create_stream_message(message.payload, state)
239239

240+
%FCPublish{transaction_id: id} ->
241+
send_messages(state, [Message.command(Response.ok(id))])
242+
{[], state}
243+
240244
%Publish{} ->
241245
handle_publish_message(message.payload, message.stream_id, state)
242246

0 commit comments

Comments
 (0)