feat: 添加 ExecuteSyncEvent 方法用于同步执行事件

This commit is contained in:
ydajiang
2025-04-19 16:19:15 +08:00
parent 2d1cd874f4
commit 3fe77446e0
2 changed files with 22 additions and 31 deletions

View File

@@ -80,6 +80,8 @@ type Source interface {
// PostEvent 切换到主协程执行当前函数 // PostEvent 切换到主协程执行当前函数
PostEvent(cb func()) PostEvent(cb func())
ExecuteSyncEvent(cb func())
// LastPacketTime 返回最近收流时间戳 // LastPacketTime 返回最近收流时间戳
LastPacketTime() time.Time LastPacketTime() time.Time
@@ -484,16 +486,9 @@ func (s *PublishSource) AddSink(sink Sink) {
} }
func (s *PublishSource) RemoveSink(sink Sink) { func (s *PublishSource) RemoveSink(sink Sink) {
group := sync.WaitGroup{} s.ExecuteSyncEvent(func() {
group.Add(1)
s.PostEvent(func() {
s.doRemoveSink(sink) s.doRemoveSink(sink)
group.Done()
}) })
group.Wait()
} }
func (s *PublishSource) RemoveSinkWithID(id SinkID) { func (s *PublishSource) RemoveSinkWithID(id SinkID) {
@@ -507,19 +502,13 @@ func (s *PublishSource) RemoveSinkWithID(id SinkID) {
func (s *PublishSource) FindSink(id SinkID) Sink { func (s *PublishSource) FindSink(id SinkID) Sink {
var result Sink var result Sink
group := sync.WaitGroup{} s.ExecuteSyncEvent(func() {
group.Add(1)
s.PostEvent(func() {
sink, ok := s.sinks[id] sink, ok := s.sinks[id]
if ok { if ok {
result = sink result = sink
} }
group.Done()
}) })
group.Wait()
return result return result
} }
@@ -663,16 +652,9 @@ func (s *PublishSource) Close() {
} }
// 同步执行, 确保close后, 主协程已经退出, 不会再处理任何推拉流、查询等任何事情. // 同步执行, 确保close后, 主协程已经退出, 不会再处理任何推拉流、查询等任何事情.
group := sync.WaitGroup{} s.ExecuteSyncEvent(func() {
group.Add(1)
s.PostEvent(func() {
s.DoClose() s.DoClose()
group.Done()
}) })
group.Wait()
} }
// 解析完所有track后, 创建各种输出流 // 解析完所有track后, 创建各种输出流
@@ -886,6 +868,18 @@ func (s *PublishSource) PostEvent(cb func()) {
s.mainContextEvents <- cb s.mainContextEvents <- cb
} }
func (s *PublishSource) ExecuteSyncEvent(cb func()) {
group := sync.WaitGroup{}
group.Add(1)
s.PostEvent(func() {
cb()
group.Done()
})
group.Wait()
}
func (s *PublishSource) CreateTime() time.Time { func (s *PublishSource) CreateTime() time.Time {
return s.createTime return s.createTime
} }
@@ -897,17 +891,12 @@ func (s *PublishSource) SetCreateTime(time time.Time) {
func (s *PublishSource) Sinks() []Sink { func (s *PublishSource) Sinks() []Sink {
var sinks []Sink var sinks []Sink
group := sync.WaitGroup{} s.ExecuteSyncEvent(func() {
group.Add(1)
s.PostEvent(func() {
for _, sink := range s.sinks { for _, sink := range s.sinks {
sinks = append(sinks, sink) sinks = append(sinks, sink)
} }
group.Done()
}) })
group.Wait()
return sinks return sinks
} }
@@ -924,5 +913,7 @@ func (s *PublishSource) GetStreamEndInfo() *StreamEndInfo {
} }
func (s *PublishSource) ProbeTimeout() { func (s *PublishSource) ProbeTimeout() {
if s.TransDemuxer != nil {
s.TransDemuxer.ProbeComplete() s.TransDemuxer.ProbeComplete()
}
} }

View File

@@ -328,7 +328,7 @@ func LoopEvent(source Source) {
} }
var ok bool var ok bool
source.PostEvent(func() { source.ExecuteSyncEvent(func() {
source.ProbeTimeout() source.ProbeTimeout()
ok = len(source.OriginTracks()) > 0 ok = len(source.OriginTracks()) > 0
}) })