mirror of
https://github.com/lkmio/lkm.git
synced 2025-10-04 06:46:24 +08:00
feat: 添加 ExecuteSyncEvent 方法用于同步执行事件
This commit is contained in:
@@ -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() {
|
||||||
s.TransDemuxer.ProbeComplete()
|
if s.TransDemuxer != nil {
|
||||||
|
s.TransDemuxer.ProbeComplete()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user