mediamtx/internal/hooks/on_read.go

62 lines
1.5 KiB
Go

package hooks
import (
"github.com/bluenviron/mediamtx/internal/conf"
"github.com/bluenviron/mediamtx/internal/defs"
"github.com/bluenviron/mediamtx/internal/externalcmd"
"github.com/bluenviron/mediamtx/internal/logger"
)
// OnReadParams are the parameters of OnRead.
type OnReadParams struct {
Logger logger.Writer
ExternalCmdPool *externalcmd.Pool
Conf *conf.Path
ExternalCmdEnv externalcmd.Environment
Reader defs.APIPathSourceOrReader
Query string
}
// OnRead is the OnRead hook.
func OnRead(params OnReadParams) func() {
var env externalcmd.Environment
var onReadCmd *externalcmd.Cmd
if params.Conf.RunOnRead != "" || params.Conf.RunOnUnread != "" {
env = params.ExternalCmdEnv
desc := params.Reader
env["MTX_QUERY"] = params.Query
env["MTX_READER_TYPE"] = desc.Type
env["MTX_READER_ID"] = desc.ID
}
if params.Conf.RunOnRead != "" {
params.Logger.Log(logger.Info, "runOnRead command started")
onReadCmd = externalcmd.NewCmd(
params.ExternalCmdPool,
params.Conf.RunOnRead,
params.Conf.RunOnReadRestart,
env,
func(err error) {
params.Logger.Log(logger.Info, "runOnRead command exited: %v", err)
})
}
return func() {
if onReadCmd != nil {
onReadCmd.Close()
params.Logger.Log(logger.Info, "runOnRead command stopped")
}
if params.Conf.RunOnUnread != "" {
params.Logger.Log(logger.Info, "runOnUnread command launched")
externalcmd.NewCmd(
params.ExternalCmdPool,
params.Conf.RunOnUnread,
false,
env,
nil)
}
}
}