mirror of
https://github.com/aler9/rtsp-simple-server
synced 2025-10-04 23:32:44 +08:00
209 lines
4.6 KiB
Go
209 lines
4.6 KiB
Go
package core
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/bluenviron/mediamtx/internal/conf"
|
|
"github.com/bluenviron/mediamtx/internal/defs"
|
|
"github.com/bluenviron/mediamtx/internal/externalcmd"
|
|
"github.com/bluenviron/mediamtx/internal/logger"
|
|
)
|
|
|
|
func onInitHook(path *path) func() {
|
|
var onInitCmd *externalcmd.Cmd
|
|
|
|
if path.conf.RunOnInit != "" {
|
|
path.Log(logger.Info, "runOnInit command started")
|
|
onInitCmd = externalcmd.NewCmd(
|
|
path.externalCmdPool,
|
|
path.conf.RunOnInit,
|
|
path.conf.RunOnInitRestart,
|
|
path.externalCmdEnv(),
|
|
func(err error) {
|
|
path.Log(logger.Info, "runOnInit command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func() {
|
|
if onInitCmd != nil {
|
|
onInitCmd.Close()
|
|
path.Log(logger.Info, "runOnInit command stopped")
|
|
}
|
|
}
|
|
}
|
|
|
|
func onConnectHook(c *conn, desc defs.APIPathSourceOrReader) func() {
|
|
var env externalcmd.Environment
|
|
var onConnectCmd *externalcmd.Cmd
|
|
|
|
if c.runOnConnect != "" || c.runOnDisconnect != "" {
|
|
_, port, _ := net.SplitHostPort(c.rtspAddress)
|
|
env = externalcmd.Environment{
|
|
"RTSP_PORT": port,
|
|
"MTX_CONN_TYPE": desc.Type,
|
|
"MTX_CONN_ID": desc.ID,
|
|
}
|
|
}
|
|
|
|
if c.runOnConnect != "" {
|
|
c.logger.Log(logger.Info, "runOnConnect command started")
|
|
|
|
onConnectCmd = externalcmd.NewCmd(
|
|
c.externalCmdPool,
|
|
c.runOnConnect,
|
|
c.runOnConnectRestart,
|
|
env,
|
|
func(err error) {
|
|
c.logger.Log(logger.Info, "runOnConnect command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func() {
|
|
if onConnectCmd != nil {
|
|
onConnectCmd.Close()
|
|
c.logger.Log(logger.Info, "runOnConnect command stopped")
|
|
}
|
|
|
|
if c.runOnDisconnect != "" {
|
|
c.logger.Log(logger.Info, "runOnDisconnect command launched")
|
|
externalcmd.NewCmd(
|
|
c.externalCmdPool,
|
|
c.runOnDisconnect,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
func onDemandHook(path *path, query string) func(string) {
|
|
var env externalcmd.Environment
|
|
var onDemandCmd *externalcmd.Cmd
|
|
|
|
if path.conf.RunOnDemand != "" || path.conf.RunOnUnDemand != "" {
|
|
env = path.externalCmdEnv()
|
|
env["MTX_QUERY"] = query
|
|
}
|
|
|
|
if path.conf.RunOnDemand != "" {
|
|
path.Log(logger.Info, "runOnDemand command started")
|
|
|
|
onDemandCmd = externalcmd.NewCmd(
|
|
path.externalCmdPool,
|
|
path.conf.RunOnDemand,
|
|
path.conf.RunOnDemandRestart,
|
|
env,
|
|
func(err error) {
|
|
path.Log(logger.Info, "runOnDemand command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func(reason string) {
|
|
if onDemandCmd != nil {
|
|
onDemandCmd.Close()
|
|
path.Log(logger.Info, "runOnDemand command stopped: %v", reason)
|
|
}
|
|
|
|
if path.conf.RunOnUnDemand != "" {
|
|
path.Log(logger.Info, "runOnUnDemand command launched")
|
|
externalcmd.NewCmd(
|
|
path.externalCmdPool,
|
|
path.conf.RunOnUnDemand,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
func onReadyHook(path *path) func() {
|
|
var env externalcmd.Environment
|
|
var onReadyCmd *externalcmd.Cmd
|
|
|
|
if path.conf.RunOnReady != "" || path.conf.RunOnNotReady != "" {
|
|
env = path.externalCmdEnv()
|
|
desc := path.source.APISourceDescribe()
|
|
env["MTX_QUERY"] = path.publisherQuery
|
|
env["MTX_SOURCE_TYPE"] = desc.Type
|
|
env["MTX_SOURCE_ID"] = desc.ID
|
|
}
|
|
|
|
if path.conf.RunOnReady != "" {
|
|
path.Log(logger.Info, "runOnReady command started")
|
|
onReadyCmd = externalcmd.NewCmd(
|
|
path.externalCmdPool,
|
|
path.conf.RunOnReady,
|
|
path.conf.RunOnReadyRestart,
|
|
env,
|
|
func(err error) {
|
|
path.Log(logger.Info, "runOnReady command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func() {
|
|
if onReadyCmd != nil {
|
|
onReadyCmd.Close()
|
|
path.Log(logger.Info, "runOnReady command stopped")
|
|
}
|
|
|
|
if path.conf.RunOnNotReady != "" {
|
|
path.Log(logger.Info, "runOnNotReady command launched")
|
|
externalcmd.NewCmd(
|
|
path.externalCmdPool,
|
|
path.conf.RunOnNotReady,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
func onReadHook(
|
|
externalCmdPool *externalcmd.Pool,
|
|
pathConf *conf.Path,
|
|
path *path,
|
|
reader defs.APIPathSourceOrReader,
|
|
query string,
|
|
l logger.Writer,
|
|
) func() {
|
|
var env externalcmd.Environment
|
|
var onReadCmd *externalcmd.Cmd
|
|
|
|
if pathConf.RunOnRead != "" || pathConf.RunOnUnread != "" {
|
|
env = path.externalCmdEnv()
|
|
desc := reader
|
|
env["MTX_QUERY"] = query
|
|
env["MTX_READER_TYPE"] = desc.Type
|
|
env["MTX_READER_ID"] = desc.ID
|
|
}
|
|
|
|
if pathConf.RunOnRead != "" {
|
|
l.Log(logger.Info, "runOnRead command started")
|
|
onReadCmd = externalcmd.NewCmd(
|
|
externalCmdPool,
|
|
pathConf.RunOnRead,
|
|
pathConf.RunOnReadRestart,
|
|
env,
|
|
func(err error) {
|
|
l.Log(logger.Info, "runOnRead command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func() {
|
|
if onReadCmd != nil {
|
|
onReadCmd.Close()
|
|
l.Log(logger.Info, "runOnRead command stopped")
|
|
}
|
|
|
|
if pathConf.RunOnUnread != "" {
|
|
l.Log(logger.Info, "runOnUnread command launched")
|
|
externalcmd.NewCmd(
|
|
externalCmdPool,
|
|
pathConf.RunOnUnread,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
}
|
|
}
|