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"
"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
}

View File

@@ -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() {