66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package hooks
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/bluenviron/mediamtx/internal/defs"
|
|
"github.com/bluenviron/mediamtx/internal/externalcmd"
|
|
"github.com/bluenviron/mediamtx/internal/logger"
|
|
)
|
|
|
|
// OnConnectParams are the parameters of OnConnect.
|
|
type OnConnectParams struct {
|
|
Logger logger.Writer
|
|
ExternalCmdPool *externalcmd.Pool
|
|
RunOnConnect string
|
|
RunOnConnectRestart bool
|
|
RunOnDisconnect string
|
|
RTSPAddress string
|
|
Desc defs.APIPathSourceOrReader
|
|
}
|
|
|
|
// OnConnect is the OnConnect hook.
|
|
func OnConnect(params OnConnectParams) func() {
|
|
var env externalcmd.Environment
|
|
var onConnectCmd *externalcmd.Cmd
|
|
|
|
if params.RunOnConnect != "" || params.RunOnDisconnect != "" {
|
|
_, port, _ := net.SplitHostPort(params.RTSPAddress)
|
|
env = externalcmd.Environment{
|
|
"RTSP_PORT": port,
|
|
"MTX_CONN_TYPE": params.Desc.Type,
|
|
"MTX_CONN_ID": params.Desc.ID,
|
|
}
|
|
}
|
|
|
|
if params.RunOnConnect != "" {
|
|
params.Logger.Log(logger.Info, "runOnConnect command started")
|
|
|
|
onConnectCmd = externalcmd.NewCmd(
|
|
params.ExternalCmdPool,
|
|
params.RunOnConnect,
|
|
params.RunOnConnectRestart,
|
|
env,
|
|
func(err error) {
|
|
params.Logger.Log(logger.Info, "runOnConnect command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
return func() {
|
|
if onConnectCmd != nil {
|
|
onConnectCmd.Close()
|
|
params.Logger.Log(logger.Info, "runOnConnect command stopped")
|
|
}
|
|
|
|
if params.RunOnDisconnect != "" {
|
|
params.Logger.Log(logger.Info, "runOnDisconnect command launched")
|
|
externalcmd.NewCmd(
|
|
params.ExternalCmdPool,
|
|
params.RunOnDisconnect,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
}
|
|
}
|