更新ChunkType问题

This commit is contained in:
langhuihui
2021-06-28 20:22:50 +08:00
parent cb2ee86b68
commit e553c415b7
3 changed files with 15 additions and 21 deletions
+4 -17
View File
@@ -64,11 +64,6 @@ const (
) )
var ( var (
rtmpHeaderPool = &sync.Pool{
New: func() interface{} {
return new(ChunkHeader)
},
}
chunkMsgPool = &sync.Pool{ chunkMsgPool = &sync.Pool{
New: func() interface{} { New: func() interface{} {
return new(Chunk) return new(Chunk)
@@ -77,7 +72,7 @@ var (
) )
func newChunkHeader(messageType byte) *ChunkHeader { func newChunkHeader(messageType byte) *ChunkHeader {
head := rtmpHeaderPool.Get().(*ChunkHeader) head := new(ChunkHeader)
head.ChunkStreamID = RTMP_CSID_CONTROL head.ChunkStreamID = RTMP_CSID_CONTROL
if messageType == RTMP_MSG_AMF0_COMMAND { if messageType == RTMP_MSG_AMF0_COMMAND {
head.ChunkStreamID = RTMP_CSID_COMMAND head.ChunkStreamID = RTMP_CSID_COMMAND
@@ -89,7 +84,7 @@ func newChunkHeader(messageType byte) *ChunkHeader {
return head return head
} }
func newRtmpHeader(chunkID uint32, timestamp uint32, messageLength uint32, messageType byte, messageStreamID uint32, extendTimestamp uint32) *ChunkHeader { func newRtmpHeader(chunkID uint32, timestamp uint32, messageLength uint32, messageType byte, messageStreamID uint32, extendTimestamp uint32) *ChunkHeader {
head := rtmpHeaderPool.Get().(*ChunkHeader) head := new(ChunkHeader)
head.ChunkStreamID = chunkID head.ChunkStreamID = chunkID
head.Timestamp = timestamp head.Timestamp = timestamp
head.MessageLength = messageLength head.MessageLength = messageLength
@@ -99,16 +94,8 @@ func newRtmpHeader(chunkID uint32, timestamp uint32, messageLength uint32, messa
return head return head
} }
func (h *ChunkHeader) Clone() *ChunkHeader { func (h ChunkHeader) Clone() *ChunkHeader {
head := rtmpHeaderPool.Get().(*ChunkHeader) return &h
head.ChunkStreamID = h.ChunkStreamID
head.Timestamp = h.Timestamp
head.MessageLength = h.MessageLength
head.MessageTypeID = h.MessageTypeID
head.MessageStreamID = h.MessageStreamID
head.ExtendTimestamp = h.ExtendTimestamp
return head
} }
type RtmpMessage interface { type RtmpMessage interface {
+3 -2
View File
@@ -416,7 +416,7 @@ func (conn *NetConnection) readChunk() (msg *Chunk, err error) {
} }
ChunkStreamID := uint32(head & 0x3f) // 0011 1111 ChunkStreamID := uint32(head & 0x3f) // 0011 1111
ChunkType := (head & 0xc0) >> 6 // 1100 0000 ChunkType := head >> 6 // 1100 0000
// 如果块流ID为0,1的话,就需要计算. // 如果块流ID为0,1的话,就需要计算.
ChunkStreamID, err = conn.readChunkStreamID(ChunkStreamID) ChunkStreamID, err = conn.readChunkStreamID(ChunkStreamID)
@@ -438,6 +438,7 @@ func (conn *NetConnection) readChunk() (msg *Chunk, err error) {
} }
chunkHead, err := conn.readChunkType(h, ChunkType) chunkHead, err := conn.readChunkType(h, ChunkType)
if err != nil { if err != nil {
return nil, errors.New("get chunk type error :" + err.Error()) return nil, errors.New("get chunk type error :" + err.Error())
} }
@@ -615,7 +616,7 @@ func (conn *NetConnection) readChunkType(h *ChunkHeader, chunkType byte) (head *
} }
case 3: case 3:
{ {
h.ChunkType = chunkType //h.ChunkType = chunkType
} }
} }
+8 -2
View File
@@ -109,18 +109,24 @@ func processRtmp(conn net.Conn) {
vt := stream.NewVideoTrack(0) vt := stream.NewVideoTrack(0)
at := stream.NewAudioTrack(0) at := stream.NewAudioTrack(0)
rec_audio = func(msg *Chunk) { rec_audio = func(msg *Chunk) {
if msg.ChunkType == 0 {
absTs[msg.ChunkStreamID] = 0
}
if msg.Timestamp == 0xffffff { if msg.Timestamp == 0xffffff {
absTs[msg.ChunkStreamID] += msg.ExtendTimestamp absTs[msg.ChunkStreamID] += msg.ExtendTimestamp
} else { } else {
absTs[msg.ChunkStreamID] += msg.Timestamp // 绝对时间戳 absTs[msg.ChunkStreamID] += msg.Timestamp
} }
at.PushByteStream(engine.AudioPack{Timestamp: absTs[msg.ChunkStreamID], Payload: msg.Body}) at.PushByteStream(engine.AudioPack{Timestamp: absTs[msg.ChunkStreamID], Payload: msg.Body})
} }
rec_video = func(msg *Chunk) { rec_video = func(msg *Chunk) {
if msg.ChunkType == 0 {
absTs[msg.ChunkStreamID] = 0
}
if msg.Timestamp == 0xffffff { if msg.Timestamp == 0xffffff {
absTs[msg.ChunkStreamID] += msg.ExtendTimestamp absTs[msg.ChunkStreamID] += msg.ExtendTimestamp
} else { } else {
absTs[msg.ChunkStreamID] += msg.Timestamp // 绝对时间戳 absTs[msg.ChunkStreamID] += msg.Timestamp
} }
vt.PushByteStream(engine.VideoPack{Timestamp: absTs[msg.ChunkStreamID], Payload: msg.Body}) vt.PushByteStream(engine.VideoPack{Timestamp: absTs[msg.ChunkStreamID], Payload: msg.Body})
} }