func (pkt *RtmpConnectAppPacket) Decode(buffer *bytes.Buffer, logger core.Logger) (err error) { if err = pkt.rtmpCommonCallPacket.Decode(buffer, logger); err != nil { return } // some client donot send id=1.0, so we only warn user if not match. if pkt.TransactionId != 1.0 { logger.Warn("connect should be 1.0, actual is %v", pkt.TransactionId) } if err = pkt.CommandObject.Decode(buffer); err != nil { logger.Error("amf0 decode connect command_object failed.") return } if buffer.Len() > 0 { // see: https://github.com/winlinvip/simple-rtmp-server/issues/186 // the args maybe any amf0, for instance, a string. we should drop if not object. var any Amf0Any if any, err = DecodeAmf0Any(buffer); err != nil { logger.Error("amf0 decode connect args failed") return } // drop when not an AMF0 object. if any.(*Amf0Object) == nil { logger.Warn("drop the args, see: '4.1.1. connect'") } else { pkt.Arguments = any.(*Amf0Object) } } logger.Info("amf0 decode connect packet success") return }