Browse Source

rtsp source: fix regression (#949)

This caused a periodic disconnection when sourceOnDemand is yes
pull/956/head
aler9 4 years ago
parent
commit
23ac079646
  1. 26
      internal/core/path.go

26
internal/core/path.go

@ -439,12 +439,8 @@ func (pa *path) run() {
} }
pa.setupPlayRequestsOnHold = nil pa.setupPlayRequestsOnHold = nil
if len(pa.readers) > 0 {
pa.onDemandStaticSourceState = pathOnDemandStateReady
} else {
pa.onDemandStaticSourceScheduleClose() pa.onDemandStaticSourceScheduleClose()
} }
}
req.res <- pathSourceStaticSetReadyRes{stream: pa.stream} req.res <- pathSourceStaticSetReadyRes{stream: pa.stream}
} else { } else {
@ -859,12 +855,8 @@ func (pa *path) handlePublisherRecord(req pathPublisherRecordReq) {
} }
pa.setupPlayRequestsOnHold = nil pa.setupPlayRequestsOnHold = nil
if len(pa.readers) > 0 {
pa.onDemandPublisherState = pathOnDemandStateReady
} else {
pa.onDemandPublisherScheduleClose() pa.onDemandPublisherScheduleClose()
} }
}
req.res <- pathPublisherRecordRes{stream: pa.stream} req.res <- pathPublisherRecordRes{stream: pa.stream}
} }
@ -887,12 +879,16 @@ func (pa *path) handleReaderRemove(req pathReaderRemoveReq) {
close(req.res) close(req.res)
if len(pa.readers) == 0 { if len(pa.readers) == 0 {
if pa.hasOnDemandStaticSource() && pa.onDemandStaticSourceState == pathOnDemandStateReady { if pa.hasOnDemandStaticSource() {
if pa.onDemandStaticSourceState == pathOnDemandStateReady {
pa.onDemandStaticSourceScheduleClose() pa.onDemandStaticSourceScheduleClose()
} else if pa.hasOnDemandPublisher() && pa.onDemandPublisherState == pathOnDemandStateReady { }
} else if pa.hasOnDemandPublisher() {
if pa.onDemandPublisherState == pathOnDemandStateReady {
pa.onDemandPublisherScheduleClose() pa.onDemandPublisherScheduleClose()
} }
} }
}
} }
func (pa *path) handleReaderSetupPlay(req pathReaderSetupPlayReq) { func (pa *path) handleReaderSetupPlay(req pathReaderSetupPlayReq) {
@ -923,11 +919,19 @@ func (pa *path) handleReaderSetupPlay(req pathReaderSetupPlayReq) {
func (pa *path) handleReaderSetupPlayPost(req pathReaderSetupPlayReq) { func (pa *path) handleReaderSetupPlayPost(req pathReaderSetupPlayReq) {
pa.readers[req.author] = pathReaderStatePrePlay pa.readers[req.author] = pathReaderStatePrePlay
if pa.hasOnDemandPublisher() && pa.onDemandPublisherState == pathOnDemandStateClosing { if pa.hasOnDemandStaticSource() {
if pa.onDemandStaticSourceState == pathOnDemandStateClosing {
pa.onDemandStaticSourceState = pathOnDemandStateReady
pa.onDemandStaticSourceCloseTimer.Stop()
pa.onDemandStaticSourceCloseTimer = newEmptyTimer()
}
} else if pa.hasOnDemandPublisher() {
if pa.onDemandPublisherState == pathOnDemandStateClosing {
pa.onDemandPublisherState = pathOnDemandStateReady pa.onDemandPublisherState = pathOnDemandStateReady
pa.onDemandPublisherCloseTimer.Stop() pa.onDemandPublisherCloseTimer.Stop()
pa.onDemandPublisherCloseTimer = newEmptyTimer() pa.onDemandPublisherCloseTimer = newEmptyTimer()
} }
}
req.res <- pathReaderSetupPlayRes{ req.res <- pathReaderSetupPlayRes{
path: pa, path: pa,

Loading…
Cancel
Save