Browse Source

srt: support runOnRead (#2152)

pull/2154/head
Alessandro Ros 3 years ago committed by GitHub
parent
commit
b198cc5952
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      internal/core/core.go
  2. 22
      internal/core/srt_conn.go
  3. 5
      internal/core/srt_server.go

1
internal/core/core.go

@ -441,6 +441,7 @@ func (p *Core) createResources(initial bool) error {
p.conf.WriteTimeout, p.conf.WriteTimeout,
p.conf.ReadBufferCount, p.conf.ReadBufferCount,
p.conf.UDPMaxPayloadSize, p.conf.UDPMaxPayloadSize,
p.externalCmdPool,
p.pathManager, p.pathManager,
p, p,
) )

22
internal/core/srt_conn.go

@ -20,6 +20,7 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/bluenviron/mediamtx/internal/conf" "github.com/bluenviron/mediamtx/internal/conf"
"github.com/bluenviron/mediamtx/internal/externalcmd"
"github.com/bluenviron/mediamtx/internal/formatprocessor" "github.com/bluenviron/mediamtx/internal/formatprocessor"
"github.com/bluenviron/mediamtx/internal/logger" "github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/stream" "github.com/bluenviron/mediamtx/internal/stream"
@ -64,6 +65,7 @@ type srtConn struct {
udpMaxPayloadSize int udpMaxPayloadSize int
connReq srt.ConnRequest connReq srt.ConnRequest
wg *sync.WaitGroup wg *sync.WaitGroup
externalCmdPool *externalcmd.Pool
pathManager srtConnPathManager pathManager srtConnPathManager
parent srtConnParent parent srtConnParent
@ -88,6 +90,7 @@ func newSRTConn(
udpMaxPayloadSize int, udpMaxPayloadSize int,
connReq srt.ConnRequest, connReq srt.ConnRequest,
wg *sync.WaitGroup, wg *sync.WaitGroup,
externalCmdPool *externalcmd.Pool,
pathManager srtConnPathManager, pathManager srtConnPathManager,
parent srtConnParent, parent srtConnParent,
) *srtConn { ) *srtConn {
@ -100,6 +103,7 @@ func newSRTConn(
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,
connReq: connReq, connReq: connReq,
wg: wg, wg: wg,
externalCmdPool: externalCmdPool,
pathManager: pathManager, pathManager: pathManager,
parent: parent, parent: parent,
ctx: ctx, ctx: ctx,
@ -746,6 +750,24 @@ func (c *srtConn) runRead(req srtNewConnReq, pathName string, user string, pass
c.Log(logger.Info, "is reading from path '%s', %s", c.Log(logger.Info, "is reading from path '%s', %s",
res.path.name, sourceMediaInfo(medias)) res.path.name, sourceMediaInfo(medias))
pathConf := res.path.safeConf()
if pathConf.RunOnRead != "" {
c.Log(logger.Info, "runOnRead command started")
onReadCmd := externalcmd.NewCmd(
c.externalCmdPool,
pathConf.RunOnRead,
pathConf.RunOnReadRestart,
res.path.externalCmdEnv(),
func(err error) {
c.Log(logger.Info, "runOnRead command exited: %v", err)
})
defer func() {
onReadCmd.Close()
c.Log(logger.Info, "runOnRead command stopped")
}()
}
w = mpegts.NewWriter(bw, tracks) w = mpegts.NewWriter(bw, tracks)
// disable read deadline // disable read deadline

5
internal/core/srt_server.go

@ -11,6 +11,7 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/bluenviron/mediamtx/internal/conf" "github.com/bluenviron/mediamtx/internal/conf"
"github.com/bluenviron/mediamtx/internal/externalcmd"
"github.com/bluenviron/mediamtx/internal/logger" "github.com/bluenviron/mediamtx/internal/logger"
) )
@ -60,6 +61,7 @@ type srtServer struct {
writeTimeout conf.StringDuration writeTimeout conf.StringDuration
readBufferCount int readBufferCount int
udpMaxPayloadSize int udpMaxPayloadSize int
externalCmdPool *externalcmd.Pool
pathManager *pathManager pathManager *pathManager
parent srtServerParent parent srtServerParent
@ -84,6 +86,7 @@ func newSRTServer(
writeTimeout conf.StringDuration, writeTimeout conf.StringDuration,
readBufferCount int, readBufferCount int,
udpMaxPayloadSize int, udpMaxPayloadSize int,
externalCmdPool *externalcmd.Pool,
pathManager *pathManager, pathManager *pathManager,
parent srtServerParent, parent srtServerParent,
) (*srtServer, error) { ) (*srtServer, error) {
@ -103,6 +106,7 @@ func newSRTServer(
writeTimeout: writeTimeout, writeTimeout: writeTimeout,
readBufferCount: readBufferCount, readBufferCount: readBufferCount,
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,
externalCmdPool: externalCmdPool,
pathManager: pathManager, pathManager: pathManager,
parent: parent, parent: parent,
ctx: ctx, ctx: ctx,
@ -161,6 +165,7 @@ outer:
s.udpMaxPayloadSize, s.udpMaxPayloadSize,
req.connReq, req.connReq,
&s.wg, &s.wg,
s.externalCmdPool,
s.pathManager, s.pathManager,
s) s)
s.conns[c] = struct{}{} s.conns[c] = struct{}{}

Loading…
Cancel
Save