Files
monibuca/plugin/gb28181/pkg/puller-dump.go
2024-12-31 09:58:41 +08:00

47 lines
968 B
Go

package gb28181
import (
"time"
"m7s.live/v5"
"m7s.live/v5/pkg/util"
)
type DumpPuller struct {
m7s.HTTPFilePuller
}
func (p *DumpPuller) Start() (err error) {
p.PullJob.PublishConfig.PubType = m7s.PublishTypeReplay
return p.HTTPFilePuller.Start()
}
func (p *DumpPuller) Run() (err error) {
pub := p.PullJob.Publisher
puber := NewPSPublisher(pub)
puber.Receiver.Logger = p.Logger
go puber.Demux()
var t uint16
defer close(puber.Receiver.FeedChan)
for l := make([]byte, 6); pub.State != m7s.PublisherStateDisposed; time.Sleep(time.Millisecond * time.Duration(t)) {
_, err = p.Read(l)
if err != nil {
return
}
payloadLen := util.ReadBE[int](l[:4])
payload := make([]byte, payloadLen)
t = util.ReadBE[uint16](l[4:])
_, err = p.Read(payload)
if err != nil {
return
}
if err = puber.Receiver.ReadRTP(payload); err != nil {
p.Error("replayPS", "err", err)
}
if pub.IsStopped() {
return pub.StopReason()
}
}
return
}