diff --git a/plugin/rtmp/pkg/const.go b/plugin/rtmp/pkg/const.go index 27b9198..cec7847 100644 --- a/plugin/rtmp/pkg/const.go +++ b/plugin/rtmp/pkg/const.go @@ -4,6 +4,7 @@ import ( "encoding/binary" "fmt" "io" + "slices" "time" "m7s.live/v5/pkg/util" @@ -56,9 +57,13 @@ func (avcc *RTMPData) GetCTS() time.Duration { } func (avcc *RTMPData) WrapAudio() *RTMPAudio { - return &RTMPAudio{RTMPData: *avcc} + ret := &RTMPAudio{RTMPData: *avcc} + ret.Memory.Buffers = slices.Clone(avcc.Memory.Buffers) + return ret } func (avcc *RTMPData) WrapVideo() *RTMPVideo { - return &RTMPVideo{RTMPData: *avcc} + ret := &RTMPVideo{RTMPData: *avcc} + ret.Memory.Buffers = slices.Clone(avcc.Memory.Buffers) + return ret } diff --git a/publisher.go b/publisher.go index e75939f..5601b19 100644 --- a/publisher.go +++ b/publisher.go @@ -654,20 +654,20 @@ func (p *Publisher) takeOver(old *Publisher) { old.Subscribers = SubscriberCollection{} } -func (p *Publisher) WaitTrack(audio, video bool) (err error) { +func (p *Publisher) WaitTrack(audio, video bool) (error) { var v, a = pkg.ErrNoTrack, pkg.ErrNoTrack // wait any track if p.PubAudio && p.PubVideo && !audio && !video { select { case <-p.videoReady.Done(): - err = context.Cause(p.videoReady.Context) - if errors.Is(err, util.ErrResolve) { - err = nil + v = context.Cause(p.videoReady.Context) + if errors.Is(v, util.ErrResolve) { + v = nil } case <-p.audioReady.Done(): - err = context.Cause(p.audioReady.Context) - if errors.Is(err, util.ErrResolve) { - err = nil + v = context.Cause(p.audioReady.Context) + if errors.Is(v, util.ErrResolve) { + v = nil } } } else { @@ -683,7 +683,7 @@ func (p *Publisher) WaitTrack(audio, video bool) (err error) { if v != nil && a != nil { return ErrNoTrack } - return + return nil } func (p *Publisher) NoVideo() {