@@ -9,7 +9,7 @@ defmodule ExRTMP.Message do
99 alias __MODULE__ . Command.NetStream . { DeleteStream , FCPublish , OnStatus , Play , Publish }
1010 alias __MODULE__ . Metadata
1111 alias __MODULE__ . UserControl.Event
12- alias ExRTMP.Chunk
12+ alias ExRTMP . { Chunk , Message }
1313
1414 @ type stream_id :: non_neg_integer ( )
1515
@@ -149,7 +149,7 @@ defmodule ExRTMP.Message do
149149
150150 payload =
151151 if is_struct ( message . payload ) ,
152- do: ExRTMP. Message.Serializer. serialize ( message . payload ) ,
152+ do: Message.Serializer . serialize ( message . payload ) ,
153153 else: message . payload
154154
155155 payload = IO . iodata_to_binary ( payload )
@@ -221,51 +221,57 @@ defmodule ExRTMP.Message do
221221 @ doc false
222222 defp parse_payload ( % __MODULE__ { type: 20 , payload: payload } = msg ) do
223223 payload =
224- case ExRTMP.AMF0 . parse ( IO . iodata_to_binary ( payload ) ) do
225- [ "connect" , transaction_id , properties | _rest ] ->
226- % Connect { transaction_id: transaction_id , properties: properties }
227-
228- [ "createStream" , transaction_id | _rest ] ->
229- % CreateStream { transaction_id: transaction_id }
230-
231- [ result , transaction_id , command_object , data ] when result in [ "_result" , "_error" ] ->
232- % Response {
233- result: result ,
234- transaction_id: trunc ( transaction_id ) ,
235- command_object: command_object ,
236- data: data
237- }
224+ payload
225+ |> IO . iodata_to_binary ( )
226+ |> ExRTMP.AMF0 . parse ( )
227+ |> handle_message_payload ( )
238228
239- [ "publish" , _txid , nil , name , type ] ->
240- Publish . new ( name , type )
229+ % { msg | payload: payload }
230+ end
241231
242- [ "FCPublish" , transaction_id , nil , name ] ->
243- FCPublish . new ( transaction_id , name )
232+ defp parse_payload ( msg ) , do: msg
244233
245- [ "deleteStream" , _txid , nil , stream_id ] ->
246- DeleteStream . new ( stream_id )
234+ defp handle_message_payload ( [ "connect" , transaction_id , properties | _rest ] ) do
235+ % Connect { transaction_id: transaction_id , properties: properties }
236+ end
247237
248- [ "play" , _txid , nil , stream_name | opts ] ->
249- play_opts =
250- case opts do
251- [ ] -> [ ]
252- [ start ] -> [ start: start ]
253- [ start , duration ] -> [ start: start , duration: duration ]
254- [ start , duration , reset ] -> [ start: start , duration: duration , reset: reset ]
255- end
238+ defp handle_message_payload ( [ "createStream" , transaction_id | _rest ] ) do
239+ % CreateStream { transaction_id: transaction_id }
240+ end
256241
257- Play . new ( stream_name , play_opts )
242+ defp handle_message_payload ( [ result , transaction_id , command_object , data ] )
243+ when result in [ "_result" , "_error" ] do
244+ % Response {
245+ result: result ,
246+ transaction_id: trunc ( transaction_id ) ,
247+ command_object: command_object ,
248+ data: data
249+ }
250+ end
258251
259- [ "onStatus ", _ts_id , nil , info ] ->
260- % OnStatus { info: info }
252+ defp handle_message_payload ( [ "publish ", _txid , nil , name , type ] ) , do: Publish . new ( name , type )
253+ defp handle_message_payload ( [ "onStatus" , _txid , nil , info ] ) , do: % OnStatus { info: info }
261254
262- other ->
263- Logger . warning ( "Unknown command: #{ inspect ( List . first ( other ) ) } " )
264- payload
255+ defp handle_message_payload ( [ "play" , _txid , nil , name | opts ] ) do
256+ play_opts =
257+ case opts do
258+ [ ] -> [ ]
259+ [ start ] -> [ start: start ]
260+ [ start , duration ] -> [ start: start , duration: duration ]
261+ [ start , duration , reset ] -> [ start: start , duration: duration , reset: reset ]
265262 end
266263
267- % { msg | payload: payload }
264+ Play . new ( name , play_opts )
268265 end
269266
270- defp parse_payload ( msg ) , do: msg
267+ defp handle_message_payload ( [ "deleteStream" , _txid , nil , stream_id ] ) ,
268+ do: DeleteStream . new ( stream_id )
269+
270+ defp handle_message_payload ( [ "FCPublish" , transaction_id , nil , name ] ) ,
271+ do: FCPublish . new ( transaction_id , name )
272+
273+ defp handle_message_payload ( other ) do
274+ Logger . warning ( "Unknown command: #{ inspect ( other ) } " )
275+ other
276+ end
271277end
0 commit comments