mirror of
https://github.com/bluenviron/mediamtx
synced 2025-03-06 12:27:31 +00:00
restore environment variables for external commands
This commit is contained in:
parent
fd1beadf9d
commit
d69d433927
37
client.go
37
client.go
@ -7,7 +7,6 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
@ -230,16 +229,8 @@ var errRunRecord = errors.New("record")
|
||||
func (c *client) run() {
|
||||
var onConnectCmd *exec.Cmd
|
||||
if c.p.conf.RunOnConnect != "" {
|
||||
var substitutedCommand = strings.ReplaceAll(c.p.conf.RunOnConnect, "$RTSP_SERVER_PATH", c.path.name)
|
||||
if runtime.GOOS == "windows" {
|
||||
var command = strings.Fields(substitutedCommand)
|
||||
onConnectCmd = exec.Command(command[0], command[1:]...)
|
||||
} else {
|
||||
onConnectCmd = exec.Command("/bin/sh", "-c", substitutedCommand)
|
||||
}
|
||||
onConnectCmd.Stdout = os.Stdout
|
||||
onConnectCmd.Stderr = os.Stderr
|
||||
err := onConnectCmd.Start()
|
||||
var err error
|
||||
onConnectCmd, err = startExternalCommand(c.p.conf.RunOnConnect, c.path.name)
|
||||
if err != nil {
|
||||
c.log("ERR: %s", err)
|
||||
}
|
||||
@ -933,16 +924,8 @@ func (c *client) runPlay() bool {
|
||||
|
||||
var onReadCmd *exec.Cmd
|
||||
if c.path.confp.RunOnRead != "" {
|
||||
var substitutedCommand = strings.ReplaceAll(c.path.confp.RunOnRead, "$RTSP_SERVER_PATH", c.path.name)
|
||||
if runtime.GOOS == "windows" {
|
||||
var command = strings.Fields(substitutedCommand)
|
||||
onReadCmd = exec.Command(command[0], command[1:]...)
|
||||
} else {
|
||||
onReadCmd = exec.Command("/bin/sh", "-c", substitutedCommand)
|
||||
}
|
||||
onReadCmd.Stdout = os.Stdout
|
||||
onReadCmd.Stderr = os.Stderr
|
||||
err := onReadCmd.Start()
|
||||
var err error
|
||||
onReadCmd, err = startExternalCommand(c.path.confp.RunOnRead, c.path.name)
|
||||
if err != nil {
|
||||
c.log("ERR: %s", err)
|
||||
}
|
||||
@ -1084,16 +1067,8 @@ func (c *client) runRecord() bool {
|
||||
|
||||
var onPublishCmd *exec.Cmd
|
||||
if c.path.confp.RunOnPublish != "" {
|
||||
var substitutedCommand = strings.ReplaceAll(c.path.confp.RunOnPublish, "$RTSP_SERVER_PATH", c.path.name)
|
||||
if runtime.GOOS == "windows" {
|
||||
var command = strings.Fields(substitutedCommand)
|
||||
onPublishCmd = exec.Command(command[0], command[1:]...)
|
||||
} else {
|
||||
onPublishCmd = exec.Command("/bin/sh", "-c", substitutedCommand)
|
||||
}
|
||||
onPublishCmd.Stdout = os.Stdout
|
||||
onPublishCmd.Stderr = os.Stderr
|
||||
err := onPublishCmd.Start()
|
||||
var err error
|
||||
onPublishCmd, err = startExternalCommand(c.path.confp.RunOnPublish, c.path.name)
|
||||
if err != nil {
|
||||
c.log("ERR: %s", err)
|
||||
}
|
||||
|
29
path.go
29
path.go
@ -4,8 +4,6 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -64,16 +62,9 @@ func (pa *path) onInit() {
|
||||
|
||||
if pa.confp.RunOnInit != "" {
|
||||
pa.log("starting on init command")
|
||||
var substitutedCommand = strings.ReplaceAll(pa.confp.RunOnInit, "$RTSP_SERVER_PATH", pa.name)
|
||||
if runtime.GOOS == "windows" {
|
||||
var command = strings.Fields(substitutedCommand)
|
||||
pa.onInitCmd = exec.Command(command[0], command[1:]...)
|
||||
} else {
|
||||
pa.onInitCmd = exec.Command("/bin/sh", "-c", substitutedCommand)
|
||||
}
|
||||
pa.onInitCmd.Stdout = os.Stdout
|
||||
pa.onInitCmd.Stderr = os.Stderr
|
||||
err := pa.onInitCmd.Start()
|
||||
|
||||
var err error
|
||||
pa.onInitCmd, err = startExternalCommand(pa.confp.RunOnInit, pa.name)
|
||||
if err != nil {
|
||||
pa.log("ERR: %s", err)
|
||||
}
|
||||
@ -235,18 +226,10 @@ func (pa *path) onDescribe(client *client) {
|
||||
if pa.confp.RunOnDemand != "" {
|
||||
if pa.onDemandCmd == nil { // start if needed
|
||||
pa.log("starting on demand command")
|
||||
|
||||
pa.lastDescribeActivation = time.Now()
|
||||
var substitutedCommand = strings.ReplaceAll(pa.confp.RunOnDemand, "$RTSP_SERVER_PATH", pa.name)
|
||||
if runtime.GOOS == "windows" {
|
||||
var command = strings.Fields(substitutedCommand)
|
||||
pa.onDemandCmd = exec.Command(command[0], command[1:]...)
|
||||
} else {
|
||||
pa.onDemandCmd = exec.Command("/bin/sh", "-c", substitutedCommand)
|
||||
}
|
||||
pa.onDemandCmd.Stdout = os.Stdout
|
||||
pa.onDemandCmd.Stderr = os.Stderr
|
||||
err := pa.onDemandCmd.Start()
|
||||
|
||||
var err error
|
||||
pa.onDemandCmd, err = startExternalCommand(pa.confp.RunOnDemand, "")
|
||||
if err != nil {
|
||||
pa.log("ERR: %s", err)
|
||||
}
|
||||
|
33
utils.go
33
utils.go
@ -3,7 +3,10 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -126,3 +129,33 @@ func checkPathName(name string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func startExternalCommand(cmdstr string, pathName string) (*exec.Cmd, error) {
|
||||
var cmd *exec.Cmd
|
||||
if runtime.GOOS == "windows" {
|
||||
// in Windows the shell is not used and command is started directly
|
||||
// variables are replaced manually in order to allow
|
||||
// compatibility with linux commands
|
||||
cmdstr = strings.ReplaceAll(cmdstr, "$RTSP_SERVER_PATH", pathName)
|
||||
args := strings.Fields(cmdstr)
|
||||
cmd = exec.Command(args[0], args[1:]...)
|
||||
|
||||
} else {
|
||||
cmd = exec.Command("/bin/sh", "-c", cmdstr)
|
||||
}
|
||||
|
||||
// variables are available through environment variables
|
||||
cmd.Env = append(os.Environ(),
|
||||
"RTSP_SERVER_PATH="+pathName,
|
||||
)
|
||||
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return cmd, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user