diff --git a/media.go b/media.go index abf1d01..e990217 100644 --- a/media.go +++ b/media.go @@ -69,14 +69,14 @@ func (sender *RTMPSender) sendAVMessage(ts uint32, payload net.Buffers, isAudio return nil } -func (r *RTMPSender) Response(code, level string) error { +func (r *RTMPSender) Response(tid uint64, code, level string) error { m := new(ResponsePlayMessage) m.CommandName = Response_OnStatus - m.TransactionId = 0 + m.TransactionId = tid m.Object = AMFObject{ - "code": code, - "level": level, - "clientid": 1, + "code": code, + "level": level, + "description": "", } m.StreamID = r.StreamID return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m) @@ -88,14 +88,14 @@ type RTMPReceiver struct { absTs map[uint32]uint32 } -func (r *RTMPReceiver) Response(code, level string) error { +func (r *RTMPReceiver) Response(tid uint64, code, level string) error { m := new(ResponsePublishMessage) m.CommandName = Response_OnStatus - m.TransactionId = 0 + m.TransactionId = tid m.Infomation = AMFObject{ - "code": code, - "level": level, - "clientid": 1, + "code": code, + "level": level, + "description": "", } m.StreamID = r.StreamID return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m) diff --git a/msg.go b/msg.go index fa99d38..d1e502b 100644 --- a/msg.go +++ b/msg.go @@ -760,7 +760,6 @@ func (msg *ResponsePublishMessage) Encode() []byte { var amf AMF amf.writeString(msg.CommandName) amf.writeNumber(float64(msg.TransactionId)) - amf.writeNull() amf.writeObject(msg.Properties) amf.writeObject(msg.Infomation) return amf.Buffer diff --git a/server.go b/server.go index 7109e5e..9514aad 100644 --- a/server.go +++ b/server.go @@ -30,7 +30,7 @@ type RTMPSubscriber struct { func (s *RTMPSubscriber) OnEvent(event any) { switch event.(type) { case engine.SEclose: - s.Response(NetStream_Play_Stop, Level_Status) + s.Response(0, NetStream_Play_Stop, Level_Status) } s.RTMPSender.OnEvent(event) } @@ -119,9 +119,9 @@ func (config *RTMPConfig) ServeTCP(conn *net.TCPConn) { receivers[receiver.StreamID] = receiver receiver.absTs = make(map[uint32]uint32) receiver.Begin() - err = receiver.Response(NetStream_Publish_Start, Level_Status) + err = receiver.Response(pm.TransactionId, NetStream_Publish_Start, Level_Status) } else { - err = receiver.Response(NetStream_Publish_BadName, Level_Error) + err = receiver.Response(pm.TransactionId, NetStream_Publish_BadName, Level_Error) } case "play": pm := msg.MsgData.(*PlayMessage) @@ -137,11 +137,11 @@ func (config *RTMPConfig) ServeTCP(conn *net.TCPConn) { senders[sender.StreamID] = sender err = nc.SendStreamID(RTMP_USER_STREAM_IS_RECORDED, msg.MessageStreamID) sender.Begin() - sender.Response(NetStream_Play_Reset, Level_Status) - sender.Response(NetStream_Play_Start, Level_Status) + sender.Response(pm.TransactionId, NetStream_Play_Reset, Level_Status) + sender.Response(pm.TransactionId, NetStream_Play_Start, Level_Status) go sender.PlayBlock(sender) } else { - sender.Response(NetStream_Play_Failed, Level_Error) + sender.Response(pm.TransactionId, NetStream_Play_Failed, Level_Error) } case "closeStream": cm := msg.MsgData.(*CURDStreamMessage)