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.
84 lines
1.8 KiB
84 lines
1.8 KiB
package core |
|
|
|
import ( |
|
"net" |
|
|
|
"github.com/bluenviron/mediamtx/internal/externalcmd" |
|
"github.com/bluenviron/mediamtx/internal/logger" |
|
) |
|
|
|
type conn struct { |
|
rtspAddress string |
|
runOnConnect string |
|
runOnConnectRestart bool |
|
runOnDisconnect string |
|
externalCmdPool *externalcmd.Pool |
|
logger logger.Writer |
|
|
|
onConnectCmd *externalcmd.Cmd |
|
} |
|
|
|
func newConn( |
|
rtspAddress string, |
|
runOnConnect string, |
|
runOnConnectRestart bool, |
|
runOnDisconnect string, |
|
externalCmdPool *externalcmd.Pool, |
|
logger logger.Writer, |
|
) *conn { |
|
return &conn{ |
|
rtspAddress: rtspAddress, |
|
runOnConnect: runOnConnect, |
|
runOnConnectRestart: runOnConnectRestart, |
|
runOnDisconnect: runOnDisconnect, |
|
externalCmdPool: externalCmdPool, |
|
logger: logger, |
|
} |
|
} |
|
|
|
func (c *conn) open(desc apiPathSourceOrReader) { |
|
if c.runOnConnect != "" { |
|
c.logger.Log(logger.Info, "runOnConnect command started") |
|
|
|
_, port, _ := net.SplitHostPort(c.rtspAddress) |
|
env := externalcmd.Environment{ |
|
"RTSP_PORT": port, |
|
"MTX_CONN_TYPE": desc.Type, |
|
"MTX_CONN_ID": desc.ID, |
|
} |
|
|
|
c.onConnectCmd = externalcmd.NewCmd( |
|
c.externalCmdPool, |
|
c.runOnConnect, |
|
c.runOnConnectRestart, |
|
env, |
|
func(err error) { |
|
c.logger.Log(logger.Info, "runOnConnect command exited: %v", err) |
|
}) |
|
} |
|
} |
|
|
|
func (c *conn) close(desc apiPathSourceOrReader) { |
|
if c.onConnectCmd != nil { |
|
c.onConnectCmd.Close() |
|
c.logger.Log(logger.Info, "runOnConnect command stopped") |
|
} |
|
|
|
if c.runOnDisconnect != "" { |
|
c.logger.Log(logger.Info, "runOnDisconnect command launched") |
|
|
|
_, port, _ := net.SplitHostPort(c.rtspAddress) |
|
env := externalcmd.Environment{ |
|
"RTSP_PORT": port, |
|
"MTX_CONN_TYPE": desc.Type, |
|
"MTX_CONN_ID": desc.ID, |
|
} |
|
|
|
externalcmd.NewCmd( |
|
c.externalCmdPool, |
|
c.runOnDisconnect, |
|
false, |
|
env, |
|
nil) |
|
} |
|
}
|
|
|