fix: sequeueFrame recycled

This commit is contained in:
langhuihui
2024-06-04 14:25:35 +08:00
parent d0e48fc405
commit 6275b9767f
3 changed files with 10 additions and 32 deletions

View File

@@ -299,7 +299,8 @@ func (reader *MemoryReader) ClipFront() (r net.Buffers) {
func (buffers *Memory) ToBytes() []byte {
ret := make([]byte, buffers.Size)
buffers.Read(ret)
buffers.Size = 0
var clone net.Buffers
clone = append(clone, buffers.Buffers...)
clone.Read(ret)
return ret
}

View File

@@ -50,31 +50,6 @@ func (av *AVSender) SendFrame(frame *RTMPData) (err error) {
return err
}
// func (rtmp *RTMPSender) OnEvent(event any) {
// switch v := event.(type) {
// case SEwaitPublish:
// rtmp.Response(1, NetStream_Play_UnpublishNotify, Response_OnStatus)
// case SEpublish:
// rtmp.Response(1, NetStream_Play_PublishNotify, Response_OnStatus)
// case ISubscriber:
//
// case AudioDeConf:
// rtmp.audio.sendSequenceHead(v)
// case VideoDeConf:
// rtmp.video.sendSequenceHead(v)
// case AudioFrame:
// if err := rtmp.audio.sendFrame(v.AVFrame, v.AbsTime); err != nil {
// rtmp.Stop(zap.Error(err))
// }
// case VideoFrame:
// if err := rtmp.video.sendFrame(v.AVFrame, v.AbsTime); err != nil {
// rtmp.Stop(zap.Error(err))
// }
// default:
// rtmp.Subscriber.OnEvent(event)
// }
// }
type RTMPReceiver struct {
*m7s.Publisher
NetStream

View File

@@ -30,23 +30,25 @@ func (avcc *RTMPVideo) Parse(t *AVTrack) (isIDR, isSeq bool, raw any, err error)
parseSequence := func() (err error) {
isSeq = true
isIDR = false
var cloneFrame RTMPVideo
cloneFrame.ReadFromBytes(avcc.ToBytes())
switch fourCC {
case codec.FourCC_H264:
var ctx H264Ctx
if err = ctx.Unmarshal(reader); err == nil {
t.SequenceFrame = avcc
t.SequenceFrame = &cloneFrame
t.ICodecCtx = &ctx
}
case codec.FourCC_H265:
var ctx H265Ctx
if err = ctx.Unmarshal(reader); err == nil {
t.SequenceFrame = avcc
t.SequenceFrame = &cloneFrame
t.ICodecCtx = &ctx
}
case codec.FourCC_AV1:
var ctx AV1Ctx
if err = ctx.Unmarshal(reader); err == nil {
t.SequenceFrame = avcc
t.SequenceFrame = &cloneFrame
t.ICodecCtx = &ctx
}
}
@@ -87,8 +89,8 @@ func (avcc *RTMPVideo) Parse(t *AVTrack) (isIDR, isSeq bool, raw any, err error)
// if err != nil {
// return
// }
// _, n := reader.ReadN(naluLen)
// fmt.Println(avcc.Timestamp, n)
// var nalus net.Buffers
// n := reader.WriteNTo(naluLen, &nalus)
// if n != naluLen {
// err = fmt.Errorf("naluLen:%d != n:%d", naluLen, n)
// return