mirror of
https://github.com/Monibuca/plugin-rtmp.git
synced 2025-10-04 23:23:34 +08:00
调整格式
This commit is contained in:
3
main.go
3
main.go
@@ -8,8 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var config = new(struct {
|
var config = new(struct {
|
||||||
ListenAddr string
|
ListenAddr string
|
||||||
FirstScreen bool
|
|
||||||
})
|
})
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@@ -371,18 +371,18 @@ func (conn *NetConnection) sendAVMessage(av *avformat.SendPacket, isAudio bool,
|
|||||||
var need []byte
|
var need []byte
|
||||||
var head *ChunkHeader
|
var head *ChunkHeader
|
||||||
if isAudio {
|
if isAudio {
|
||||||
head = newRtmpHeader(RTMP_CSID_AUDIO, av.Timestamp, uint32(len(av.Packet.Payload)), RTMP_MSG_AUDIO, conn.streamID, 0)
|
head = newRtmpHeader(RTMP_CSID_AUDIO, av.Timestamp, uint32(len(av.Payload)), RTMP_MSG_AUDIO, conn.streamID, 0)
|
||||||
} else {
|
} else {
|
||||||
head = newRtmpHeader(RTMP_CSID_VIDEO, av.Timestamp, uint32(len(av.Packet.Payload)), RTMP_MSG_VIDEO, conn.streamID, 0)
|
head = newRtmpHeader(RTMP_CSID_VIDEO, av.Timestamp, uint32(len(av.Payload)), RTMP_MSG_VIDEO, conn.streamID, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第一次是发送关键帧,需要完整的消息头(Chunk Basic Header(1) + Chunk Message Header(11) + Extended Timestamp(4)(可能会要包括))
|
// 第一次是发送关键帧,需要完整的消息头(Chunk Basic Header(1) + Chunk Message Header(11) + Extended Timestamp(4)(可能会要包括))
|
||||||
// 后面开始,就是直接发送音视频数据,那么直接发送,不需要完整的块(Chunk Basic Header(1) + Chunk Message Header(7))
|
// 后面开始,就是直接发送音视频数据,那么直接发送,不需要完整的块(Chunk Basic Header(1) + Chunk Message Header(7))
|
||||||
// 当Chunk Type为0时(即Chunk12),
|
// 当Chunk Type为0时(即Chunk12),
|
||||||
if isFirst {
|
if isFirst {
|
||||||
mark, need, err = encodeChunk12(head, av.Packet.Payload, conn.writeChunkSize)
|
mark, need, err = encodeChunk12(head, av.Payload, conn.writeChunkSize)
|
||||||
} else {
|
} else {
|
||||||
mark, need, err = encodeChunk8(head, av.Packet.Payload, conn.writeChunkSize)
|
mark, need, err = encodeChunk8(head, av.Payload, conn.writeChunkSize)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
netStream.go
17
netStream.go
@@ -107,9 +107,6 @@ func processRtmp(conn net.Conn) {
|
|||||||
streamPath := nc.appName + "/" + strings.Split(pm.PublishingName, "?")[0]
|
streamPath := nc.appName + "/" + strings.Split(pm.PublishingName, "?")[0]
|
||||||
pub := new(RTMP)
|
pub := new(RTMP)
|
||||||
if pub.Publish(streamPath, pub) {
|
if pub.Publish(streamPath, pub) {
|
||||||
// if config.FirstScreen {
|
|
||||||
// pub.FirstScreen = make([]*avformat.AVPacket, 0)
|
|
||||||
// }
|
|
||||||
room = pub.Room
|
room = pub.Room
|
||||||
err = nc.SendMessage(SEND_STREAM_BEGIN_MESSAGE, nil)
|
err = nc.SendMessage(SEND_STREAM_BEGIN_MESSAGE, nil)
|
||||||
err = nc.SendMessage(SEND_PUBLISH_START_MESSAGE, newPublishResponseMessageData(nc.streamID, NetStream_Publish_Start, Level_Status))
|
err = nc.SendMessage(SEND_PUBLISH_START_MESSAGE, newPublishResponseMessageData(nc.streamID, NetStream_Publish_Start, Level_Status))
|
||||||
@@ -123,7 +120,7 @@ func processRtmp(conn net.Conn) {
|
|||||||
var lastAudioTime uint32 = 0
|
var lastAudioTime uint32 = 0
|
||||||
var lastVideoTime uint32 = 0
|
var lastVideoTime uint32 = 0
|
||||||
// followAVCSequence := false
|
// followAVCSequence := false
|
||||||
stream := &OutputStream{SendHandler: func(timestamp uint32, packet *avformat.AVPacket) (err error) {
|
stream := &OutputStream{SendHandler: func(packet *avformat.SendPacket) (err error) {
|
||||||
switch true {
|
switch true {
|
||||||
// case packet.IsADTS:
|
// case packet.IsADTS:
|
||||||
// tagPacket := avformat.NewAVPacket(RTMP_MSG_AUDIO)
|
// tagPacket := avformat.NewAVPacket(RTMP_MSG_AUDIO)
|
||||||
@@ -140,7 +137,7 @@ func processRtmp(conn net.Conn) {
|
|||||||
// err = nc.SendMessage(SEND_AUDIO_MESSAGE, contentPacket)
|
// err = nc.SendMessage(SEND_AUDIO_MESSAGE, contentPacket)
|
||||||
// }
|
// }
|
||||||
case packet.IsAVCSequence:
|
case packet.IsAVCSequence:
|
||||||
err = nc.SendMessage(SEND_FULL_VDIEO_MESSAGE, avformat.NewSendPacket(packet, timestamp))
|
err = nc.SendMessage(SEND_FULL_VDIEO_MESSAGE, packet)
|
||||||
// followAVCSequence = true
|
// followAVCSequence = true
|
||||||
case packet.Type == RTMP_MSG_VIDEO:
|
case packet.Type == RTMP_MSG_VIDEO:
|
||||||
// if followAVCSequence {
|
// if followAVCSequence {
|
||||||
@@ -150,15 +147,15 @@ func processRtmp(conn net.Conn) {
|
|||||||
// }
|
// }
|
||||||
t := packet.Timestamp - lastVideoTime
|
t := packet.Timestamp - lastVideoTime
|
||||||
lastVideoTime = packet.Timestamp
|
lastVideoTime = packet.Timestamp
|
||||||
//packet.Timestamp = t
|
packet.Timestamp = t
|
||||||
err = nc.SendMessage(SEND_VIDEO_MESSAGE, avformat.NewSendPacket(packet, t))
|
err = nc.SendMessage(SEND_VIDEO_MESSAGE, packet)
|
||||||
case packet.IsAACSequence:
|
case packet.IsAACSequence:
|
||||||
err = nc.SendMessage(SEND_FULL_AUDIO_MESSAGE, avformat.NewSendPacket(packet, timestamp))
|
err = nc.SendMessage(SEND_FULL_AUDIO_MESSAGE, packet)
|
||||||
case packet.Type == RTMP_MSG_AUDIO:
|
case packet.Type == RTMP_MSG_AUDIO:
|
||||||
t := packet.Timestamp - lastAudioTime
|
t := packet.Timestamp - lastAudioTime
|
||||||
lastAudioTime = packet.Timestamp
|
lastAudioTime = packet.Timestamp
|
||||||
//packet.Timestamp = t
|
packet.Timestamp = t
|
||||||
err = nc.SendMessage(SEND_AUDIO_MESSAGE, avformat.NewSendPacket(packet, t))
|
err = nc.SendMessage(SEND_AUDIO_MESSAGE, packet)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}}
|
}}
|
||||||
|
Reference in New Issue
Block a user