mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-10-17 06:11:23 +08:00
fix: rtmp clone buffers
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
16
publisher.go
16
publisher.go
@@ -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() {
|
||||||
|
Reference in New Issue
Block a user