mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
fix: PSReceiver block
This commit is contained in:
2
go.mod
2
go.mod
@@ -23,7 +23,7 @@ require (
|
||||
github.com/icholy/digest v1.1.0
|
||||
github.com/jinzhu/copier v0.4.0
|
||||
github.com/kerberos-io/onvif v1.0.0
|
||||
github.com/langhuihui/gotask v1.0.1
|
||||
github.com/langhuihui/gotask v1.0.2
|
||||
github.com/mark3labs/mcp-go v0.27.0
|
||||
github.com/mattn/go-sqlite3 v1.14.24
|
||||
github.com/mcuadros/go-defaults v1.2.0
|
||||
|
||||
4
go.sum
4
go.sum
@@ -160,8 +160,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/langhuihui/gomem v0.0.0-20251001011839-023923cf7683 h1:lITBgMb71ad6OUU9gycsheCw9PpMbXy3/QA8T0V0dVM=
|
||||
github.com/langhuihui/gomem v0.0.0-20251001011839-023923cf7683/go.mod h1:BTPq1+4YUP4i7w8VHzs5AUIdn3T5gXjIUXbxgHW9TIQ=
|
||||
github.com/langhuihui/gotask v1.0.1 h1:X+xETKZQ+OdRO8pNYudNdJH4yZ2QJM6ehHQVjw1i5RY=
|
||||
github.com/langhuihui/gotask v1.0.1/go.mod h1:2zNqwV8M1pHoO0b5JC/A37oYpdtXrfL10Qof9AvR5IE=
|
||||
github.com/langhuihui/gotask v1.0.2 h1:vcQ/9yD0+x2DkSrDBkYpufOyJxXs7i5fd7wUD8gvLLs=
|
||||
github.com/langhuihui/gotask v1.0.2/go.mod h1:2zNqwV8M1pHoO0b5JC/A37oYpdtXrfL10Qof9AvR5IE=
|
||||
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo=
|
||||
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
|
||||
|
||||
@@ -89,6 +89,10 @@ func (p *PSReceiver) Start() error {
|
||||
}
|
||||
|
||||
func (p *PSReceiver) Run() error {
|
||||
err := p.Receiver.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.MpegPsDemuxer.Allocator = gomem.NewScalableMemoryAllocator(1 << gomem.MinPowerOf2)
|
||||
p.Using(p.MpegPsDemuxer.Allocator)
|
||||
return p.MpegPsDemuxer.Feed(p.BufReader)
|
||||
@@ -97,7 +101,7 @@ func (p *PSReceiver) Run() error {
|
||||
// UpdateRtpTimestamp 更新 RTP 时间戳(从 RTP 包中调用)
|
||||
func (p *PSReceiver) UpdateRtpTimestamp(timestamp uint32) {
|
||||
now := time.Now()
|
||||
|
||||
|
||||
if !p.hasFirstTimestamp {
|
||||
p.firstRtpTimestamp = timestamp
|
||||
p.hasFirstTimestamp = true
|
||||
@@ -108,12 +112,12 @@ func (p *PSReceiver) UpdateRtpTimestamp(timestamp uint32) {
|
||||
p.ProgressUpdatePeriod = time.Second
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 检测时间戳是否变化
|
||||
if timestamp != p.currentRtpTimestamp {
|
||||
p.currentRtpTimestamp = timestamp
|
||||
p.lastTimestampUpdate = now
|
||||
|
||||
|
||||
// 定期触发进度更新回调(避免过于频繁)
|
||||
if p.OnProgressUpdate != nil && now.Sub(p.lastProgressUpdate) >= p.ProgressUpdatePeriod {
|
||||
p.lastProgressUpdate = now
|
||||
@@ -184,7 +188,7 @@ func (p *Receiver) Start() (err error) {
|
||||
return errors.New("start listen,err" + err.Error())
|
||||
}
|
||||
p.OnStop(p.Listener.Close)
|
||||
conn, err = p.Accept()
|
||||
return
|
||||
} else {
|
||||
conn = p.SinglePort
|
||||
}
|
||||
@@ -224,3 +228,17 @@ func (p *Receiver) Start() (err error) {
|
||||
p.Using(rtpReader, p.BufReader)
|
||||
return
|
||||
}
|
||||
|
||||
func (p *Receiver) Run() error {
|
||||
if p.Listener != nil {
|
||||
conn, err := p.Accept()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.OnStop(conn.Close)
|
||||
rtpReader := NewRTPPayloadReader(NewRTPTCPReader(conn))
|
||||
p.rtpReader = rtpReader
|
||||
p.BufReader = util.NewBufReader(rtpReader)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ var (
|
||||
defaultYaml m7s.DefaultYaml
|
||||
reg_level = regexp.MustCompile("profile-level-id=(4.+f)")
|
||||
_ = m7s.InstallPlugin[WebRTCPlugin](m7s.PluginMeta{
|
||||
DefaultYaml: defaultYaml,
|
||||
NewPuller: NewPuller,
|
||||
NewPusher: NewPusher,
|
||||
DefaultYaml: defaultYaml,
|
||||
NewPuller: NewPuller,
|
||||
NewPusher: NewPusher,
|
||||
NewPullProxy: NewPullProxy,
|
||||
})
|
||||
)
|
||||
@@ -37,9 +37,9 @@ type WebRTCPlugin struct {
|
||||
m7s.Plugin
|
||||
ICEServers []ICEServer `desc:"ice服务器配置"`
|
||||
Port string `default:"tcp:9000" desc:"监听端口"`
|
||||
PLI time.Duration `default:"2s" desc:"发送PLI请求间隔"` // 视频流丢包后,发送PLI请求
|
||||
EnableDC bool `default:"true" desc:"是否启用DataChannel"` // 在不支持编码格式的情况下是否启用DataChannel传输
|
||||
MimeType []string `desc:"MimeType过滤列表,为空则不过滤"` // MimeType过滤列表,支持的格式如:video/H264, audio/opus
|
||||
PLI time.Duration `default:"2s" desc:"发送PLI请求间隔"` // 视频流丢包后,发送PLI请求
|
||||
EnableDC bool `desc:"是否启用DataChannel"` // 在不支持编码格式的情况下是否启用DataChannel传输
|
||||
MimeType []string `desc:"MimeType过滤列表,为空则不过滤"` // MimeType过滤列表,支持的格式如:video/H264, audio/opus
|
||||
s SettingEngine
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user