fix: rtmp clone buffers

This commit is contained in:
langhuihui
2025-06-22 23:10:57 +08:00
parent cf6153fa91
commit 5731c2e8da
2 changed files with 15 additions and 10 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"io" "io"
"slices"
"time" "time"
"m7s.live/v5/pkg/util" "m7s.live/v5/pkg/util"
@@ -56,9 +57,13 @@ func (avcc *RTMPData) GetCTS() time.Duration {
} }
func (avcc *RTMPData) WrapAudio() *RTMPAudio { 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 { func (avcc *RTMPData) WrapVideo() *RTMPVideo {
return &RTMPVideo{RTMPData: *avcc} ret := &RTMPVideo{RTMPData: *avcc}
ret.Memory.Buffers = slices.Clone(avcc.Memory.Buffers)
return ret
} }

View File

@@ -654,20 +654,20 @@ func (p *Publisher) takeOver(old *Publisher) {
old.Subscribers = SubscriberCollection{} 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 var v, a = pkg.ErrNoTrack, pkg.ErrNoTrack
// wait any track // wait any track
if p.PubAudio && p.PubVideo && !audio && !video { if p.PubAudio && p.PubVideo && !audio && !video {
select { select {
case <-p.videoReady.Done(): case <-p.videoReady.Done():
err = context.Cause(p.videoReady.Context) v = context.Cause(p.videoReady.Context)
if errors.Is(err, util.ErrResolve) { if errors.Is(v, util.ErrResolve) {
err = nil v = nil
} }
case <-p.audioReady.Done(): case <-p.audioReady.Done():
err = context.Cause(p.audioReady.Context) v = context.Cause(p.audioReady.Context)
if errors.Is(err, util.ErrResolve) { if errors.Is(v, util.ErrResolve) {
err = nil v = nil
} }
} }
} else { } else {
@@ -683,7 +683,7 @@ func (p *Publisher) WaitTrack(audio, video bool) (err error) {
if v != nil && a != nil { if v != nil && a != nil {
return ErrNoTrack return ErrNoTrack
} }
return return nil
} }
func (p *Publisher) NoVideo() { func (p *Publisher) NoVideo() {