diff --git a/message/body_decoder.go b/message/body_decoder.go index d9c0ceb..9509eda 100644 --- a/message/body_decoder.go +++ b/message/body_decoder.go @@ -200,7 +200,12 @@ func DecodeBodyPublish(_ io.Reader, d AMFDecoder, v *AMFConvertible) error { } var publishingType string if err := d.Decode(&publishingType); err != nil { - return errors.Wrap(err, "Failed to decode 'publish' args[2]") + // value is optional + if errors.Is(err, io.EOF) { + publishingType = "live" + } else { + return errors.Wrap(err, "Failed to decode 'publish' args[2]") + } } var cmd NetStreamPublish diff --git a/message/body_decoder_test.go b/message/body_decoder_test.go index 2d966a4..2088a3c 100644 --- a/message/body_decoder_test.go +++ b/message/body_decoder_test.go @@ -112,6 +112,25 @@ func TestDecodeCmdMessagePublish(t *testing.T) { }, v) } +func TestDecodeCmdMessagePublishWithoutPublishingType(t *testing.T) { + bin := []byte{ + // nil + 0x05, + // string: abc + 0x02, 0x00, 0x03, 0x61, 0x62, 0x63, + } + r := bytes.NewReader(bin) + d := amf0.NewDecoder(r) + + var v AMFConvertible + err := CmdBodyDecoderFor("publish", 42)(r, d, &v) + require.Nil(t, err) + require.Equal(t, &NetStreamPublish{ + PublishingName: "abc", + PublishingType: "live", + }, v) +} + func TestDecodeCmdMessagePlay(t *testing.T) { bin := []byte{ // nil