diff --git a/pkg/util/buffers.go b/pkg/util/buffers.go index e40df7e..e8511a7 100644 --- a/pkg/util/buffers.go +++ b/pkg/util/buffers.go @@ -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 } diff --git a/plugin/rtmp/pkg/media.go b/plugin/rtmp/pkg/media.go index 5b8df81..47e5c31 100644 --- a/plugin/rtmp/pkg/media.go +++ b/plugin/rtmp/pkg/media.go @@ -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 diff --git a/plugin/rtmp/pkg/video.go b/plugin/rtmp/pkg/video.go index b57ffc2..61ce3da 100644 --- a/plugin/rtmp/pkg/video.go +++ b/plugin/rtmp/pkg/video.go @@ -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