golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
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) |
|
} |
|
} |
|
}
|
|
|