mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
fix: sequeueFrame recycled
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user