Browse Source

hls muxer: fix code 500 when a stream is not found

pull/1003/head
aler9 3 years ago
parent
commit
cb610a707c
  1. 15
      internal/core/hls_muxer.go
  2. 16
      internal/core/hls_server.go

15
internal/core/hls_muxer.go

@ -130,10 +130,10 @@ type hlsMuxer struct { @@ -130,10 +130,10 @@ type hlsMuxer struct {
ringBuffer *ringbuffer.RingBuffer
lastRequestTime *int64
muxer *hls.Muxer
requests []hlsMuxerRequest
requests []*hlsMuxerRequest
// in
request chan hlsMuxerRequest
request chan *hlsMuxerRequest
hlsServerAPIMuxersList chan hlsServerAPIMuxersListSubReq
}
@ -149,6 +149,7 @@ func newHLSMuxer( @@ -149,6 +149,7 @@ func newHLSMuxer(
hlsPartDuration conf.StringDuration,
hlsSegmentMaxSize conf.StringSize,
readBufferCount int,
req *hlsMuxerRequest,
wg *sync.WaitGroup,
pathName string,
pathManager hlsMuxerPathManager,
@ -176,10 +177,14 @@ func newHLSMuxer( @@ -176,10 +177,14 @@ func newHLSMuxer(
v := time.Now().Unix()
return &v
}(),
request: make(chan hlsMuxerRequest),
request: make(chan *hlsMuxerRequest),
hlsServerAPIMuxersList: make(chan hlsServerAPIMuxersListSubReq),
}
if req != nil {
m.requests = append(m.requests, req)
}
m.log(logger.Info, "created %s", func() string {
if remoteAddr == "" {
return "automatically"
@ -409,7 +414,7 @@ func (m *hlsMuxer) runInner(innerCtx context.Context, innerReady chan struct{}) @@ -409,7 +414,7 @@ func (m *hlsMuxer) runInner(innerCtx context.Context, innerReady chan struct{})
}
}
func (m *hlsMuxer) handleRequest(req hlsMuxerRequest) func() *hls.MuxerFileResponse {
func (m *hlsMuxer) handleRequest(req *hlsMuxerRequest) func() *hls.MuxerFileResponse {
atomic.StoreInt64(m.lastRequestTime, time.Now().Unix())
err := m.authenticate(req.ctx.Request)
@ -508,7 +513,7 @@ func (m *hlsMuxer) authenticate(req *http.Request) error { @@ -508,7 +513,7 @@ func (m *hlsMuxer) authenticate(req *http.Request) error {
}
// onRequest is called by hlsserver.Server (forwarded from ServeHTTP).
func (m *hlsMuxer) onRequest(req hlsMuxerRequest) {
func (m *hlsMuxer) onRequest(req *hlsMuxerRequest) {
select {
case m.request <- req:
case <-m.ctx.Done():

16
internal/core/hls_server.go

@ -76,7 +76,7 @@ type hlsServer struct { @@ -76,7 +76,7 @@ type hlsServer struct {
// in
pathSourceReady chan *path
request chan hlsMuxerRequest
request chan *hlsMuxerRequest
muxerClose chan *hlsMuxer
apiMuxersList chan hlsServerAPIMuxersListReq
}
@ -139,7 +139,7 @@ func newHLSServer( @@ -139,7 +139,7 @@ func newHLSServer(
tlsConfig: tlsConfig,
muxers: make(map[string]*hlsMuxer),
pathSourceReady: make(chan *path),
request: make(chan hlsMuxerRequest),
request: make(chan *hlsMuxerRequest),
muxerClose: make(chan *hlsMuxer),
apiMuxersList: make(chan hlsServerAPIMuxersListReq),
}
@ -192,12 +192,11 @@ outer: @@ -192,12 +192,11 @@ outer:
select {
case pa := <-s.pathSourceReady:
if s.hlsAlwaysRemux {
s.findOrCreateMuxer(pa.Name(), "")
s.findOrCreateMuxer(pa.Name(), "", nil)
}
case req := <-s.request:
r := s.findOrCreateMuxer(req.dir, req.ctx.Request.RemoteAddr)
r.onRequest(req)
s.findOrCreateMuxer(req.dir, req.ctx.Request.RemoteAddr, req)
case c := <-s.muxerClose:
if c2, ok := s.muxers[c.PathName()]; !ok || c2 != c {
@ -286,7 +285,7 @@ func (s *hlsServer) onRequest(ctx *gin.Context) { @@ -286,7 +285,7 @@ func (s *hlsServer) onRequest(ctx *gin.Context) {
dir = strings.TrimSuffix(dir, "/")
cres := make(chan func() *hls.MuxerFileResponse)
hreq := hlsMuxerRequest{
hreq := &hlsMuxerRequest{
dir: dir,
file: fname,
ctx: ctx,
@ -315,7 +314,7 @@ func (s *hlsServer) onRequest(ctx *gin.Context) { @@ -315,7 +314,7 @@ func (s *hlsServer) onRequest(ctx *gin.Context) {
s.log(logger.Debug, "[conn %v] [s->c] %s", ctx.Request.RemoteAddr, logw.dump())
}
func (s *hlsServer) findOrCreateMuxer(pathName string, remoteAddr string) *hlsMuxer {
func (s *hlsServer) findOrCreateMuxer(pathName string, remoteAddr string, req *hlsMuxerRequest) *hlsMuxer {
r, ok := s.muxers[pathName]
if !ok {
r = newHLSMuxer(
@ -330,11 +329,14 @@ func (s *hlsServer) findOrCreateMuxer(pathName string, remoteAddr string) *hlsMu @@ -330,11 +329,14 @@ func (s *hlsServer) findOrCreateMuxer(pathName string, remoteAddr string) *hlsMu
s.hlsPartDuration,
s.hlsSegmentMaxSize,
s.readBufferCount,
req,
&s.wg,
pathName,
s.pathManager,
s)
s.muxers[pathName] = r
} else if req != nil {
r.onRequest(req)
}
return r
}

Loading…
Cancel
Save