修复onStatus消息回复格式错误

This commit is contained in:
dexter
2022-03-10 00:05:31 +08:00
parent 8256f86b04
commit f524e94cb9
3 changed files with 16 additions and 17 deletions

View File

@@ -69,14 +69,14 @@ func (sender *RTMPSender) sendAVMessage(ts uint32, payload net.Buffers, isAudio
return nil return nil
} }
func (r *RTMPSender) Response(code, level string) error { func (r *RTMPSender) Response(tid uint64, code, level string) error {
m := new(ResponsePlayMessage) m := new(ResponsePlayMessage)
m.CommandName = Response_OnStatus m.CommandName = Response_OnStatus
m.TransactionId = 0 m.TransactionId = tid
m.Object = AMFObject{ m.Object = AMFObject{
"code": code, "code": code,
"level": level, "level": level,
"clientid": 1, "description": "",
} }
m.StreamID = r.StreamID m.StreamID = r.StreamID
return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m) return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m)
@@ -88,14 +88,14 @@ type RTMPReceiver struct {
absTs map[uint32]uint32 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 := new(ResponsePublishMessage)
m.CommandName = Response_OnStatus m.CommandName = Response_OnStatus
m.TransactionId = 0 m.TransactionId = tid
m.Infomation = AMFObject{ m.Infomation = AMFObject{
"code": code, "code": code,
"level": level, "level": level,
"clientid": 1, "description": "",
} }
m.StreamID = r.StreamID m.StreamID = r.StreamID
return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m) return r.SendMessage(RTMP_MSG_AMF0_COMMAND, m)

1
msg.go
View File

@@ -760,7 +760,6 @@ func (msg *ResponsePublishMessage) Encode() []byte {
var amf AMF var amf AMF
amf.writeString(msg.CommandName) amf.writeString(msg.CommandName)
amf.writeNumber(float64(msg.TransactionId)) amf.writeNumber(float64(msg.TransactionId))
amf.writeNull()
amf.writeObject(msg.Properties) amf.writeObject(msg.Properties)
amf.writeObject(msg.Infomation) amf.writeObject(msg.Infomation)
return amf.Buffer return amf.Buffer

View File

@@ -30,7 +30,7 @@ type RTMPSubscriber struct {
func (s *RTMPSubscriber) OnEvent(event any) { func (s *RTMPSubscriber) OnEvent(event any) {
switch event.(type) { switch event.(type) {
case engine.SEclose: case engine.SEclose:
s.Response(NetStream_Play_Stop, Level_Status) s.Response(0, NetStream_Play_Stop, Level_Status)
} }
s.RTMPSender.OnEvent(event) s.RTMPSender.OnEvent(event)
} }
@@ -119,9 +119,9 @@ func (config *RTMPConfig) ServeTCP(conn *net.TCPConn) {
receivers[receiver.StreamID] = receiver receivers[receiver.StreamID] = receiver
receiver.absTs = make(map[uint32]uint32) receiver.absTs = make(map[uint32]uint32)
receiver.Begin() receiver.Begin()
err = receiver.Response(NetStream_Publish_Start, Level_Status) err = receiver.Response(pm.TransactionId, NetStream_Publish_Start, Level_Status)
} else { } else {
err = receiver.Response(NetStream_Publish_BadName, Level_Error) err = receiver.Response(pm.TransactionId, NetStream_Publish_BadName, Level_Error)
} }
case "play": case "play":
pm := msg.MsgData.(*PlayMessage) pm := msg.MsgData.(*PlayMessage)
@@ -137,11 +137,11 @@ func (config *RTMPConfig) ServeTCP(conn *net.TCPConn) {
senders[sender.StreamID] = sender senders[sender.StreamID] = sender
err = nc.SendStreamID(RTMP_USER_STREAM_IS_RECORDED, msg.MessageStreamID) err = nc.SendStreamID(RTMP_USER_STREAM_IS_RECORDED, msg.MessageStreamID)
sender.Begin() sender.Begin()
sender.Response(NetStream_Play_Reset, Level_Status) sender.Response(pm.TransactionId, NetStream_Play_Reset, Level_Status)
sender.Response(NetStream_Play_Start, Level_Status) sender.Response(pm.TransactionId, NetStream_Play_Start, Level_Status)
go sender.PlayBlock(sender) go sender.PlayBlock(sender)
} else { } else {
sender.Response(NetStream_Play_Failed, Level_Error) sender.Response(pm.TransactionId, NetStream_Play_Failed, Level_Error)
} }
case "closeStream": case "closeStream":
cm := msg.MsgData.(*CURDStreamMessage) cm := msg.MsgData.(*CURDStreamMessage)