mirror of
https://github.com/Monibuca/plugin-rtmp.git
synced 2025-10-05 15:37:11 +08:00
修复onStatus消息回复格式错误
This commit is contained in:
12
media.go
12
media.go
@@ -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
1
msg.go
@@ -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
|
||||||
|
12
server.go
12
server.go
@@ -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)
|
||||||
|
Reference in New Issue
Block a user