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.
179 lines
4.3 KiB
179 lines
4.3 KiB
package defs |
|
|
|
import ( |
|
"fmt" |
|
"net" |
|
|
|
"github.com/bluenviron/gortsplib/v4/pkg/base" |
|
"github.com/bluenviron/gortsplib/v4/pkg/description" |
|
"github.com/google/uuid" |
|
|
|
"github.com/bluenviron/mediamtx/internal/auth" |
|
"github.com/bluenviron/mediamtx/internal/conf" |
|
"github.com/bluenviron/mediamtx/internal/externalcmd" |
|
"github.com/bluenviron/mediamtx/internal/stream" |
|
) |
|
|
|
// PathNoOnePublishingError is returned when no one is publishing. |
|
type PathNoOnePublishingError struct { |
|
PathName string |
|
} |
|
|
|
// Error implements the error interface. |
|
func (e PathNoOnePublishingError) Error() string { |
|
return fmt.Sprintf("no one is publishing to path '%s'", e.PathName) |
|
} |
|
|
|
// Path is a path. |
|
type Path interface { |
|
Name() string |
|
SafeConf() *conf.Path |
|
ExternalCmdEnv() externalcmd.Environment |
|
StartPublisher(req PathStartPublisherReq) (*stream.Stream, error) |
|
StopPublisher(req PathStopPublisherReq) |
|
RemovePublisher(req PathRemovePublisherReq) |
|
RemoveReader(req PathRemoveReaderReq) |
|
} |
|
|
|
// PathAccessRequest is an access request. |
|
type PathAccessRequest struct { |
|
Name string |
|
Query string |
|
Publish bool |
|
SkipAuth bool |
|
|
|
// only if skipAuth = false |
|
IP net.IP |
|
User string |
|
Pass string |
|
Proto auth.Protocol |
|
ID *uuid.UUID |
|
RTSPRequest *base.Request |
|
RTSPBaseURL *base.URL |
|
RTSPNonce string |
|
} |
|
|
|
// ToAuthRequest converts a path access request into an authentication request. |
|
func (r *PathAccessRequest) ToAuthRequest() *auth.Request { |
|
return &auth.Request{ |
|
User: r.User, |
|
Pass: r.Pass, |
|
IP: r.IP, |
|
Action: func() conf.AuthAction { |
|
if r.Publish { |
|
return conf.AuthActionPublish |
|
} |
|
return conf.AuthActionRead |
|
}(), |
|
Path: r.Name, |
|
Protocol: r.Proto, |
|
ID: r.ID, |
|
Query: r.Query, |
|
RTSPRequest: r.RTSPRequest, |
|
RTSPBaseURL: r.RTSPBaseURL, |
|
RTSPNonce: r.RTSPNonce, |
|
} |
|
} |
|
|
|
// PathFindPathConfRes contains the response of FindPathConf(). |
|
type PathFindPathConfRes struct { |
|
Conf *conf.Path |
|
Err error |
|
} |
|
|
|
// PathFindPathConfReq contains arguments of FindPathConf(). |
|
type PathFindPathConfReq struct { |
|
AccessRequest PathAccessRequest |
|
Res chan PathFindPathConfRes |
|
} |
|
|
|
// PathDescribeRes contains the response of Describe(). |
|
type PathDescribeRes struct { |
|
Path Path |
|
Stream *stream.Stream |
|
Redirect string |
|
Err error |
|
} |
|
|
|
// PathDescribeReq contains arguments of Describe(). |
|
type PathDescribeReq struct { |
|
AccessRequest PathAccessRequest |
|
Res chan PathDescribeRes |
|
} |
|
|
|
// PathAddPublisherRes contains the response of AddPublisher(). |
|
type PathAddPublisherRes struct { |
|
Path Path |
|
Err error |
|
} |
|
|
|
// PathAddPublisherReq contains arguments of AddPublisher(). |
|
type PathAddPublisherReq struct { |
|
Author Publisher |
|
AccessRequest PathAccessRequest |
|
Res chan PathAddPublisherRes |
|
} |
|
|
|
// PathRemovePublisherReq contains arguments of RemovePublisher(). |
|
type PathRemovePublisherReq struct { |
|
Author Publisher |
|
Res chan struct{} |
|
} |
|
|
|
// PathStartPublisherRes contains the response of StartPublisher(). |
|
type PathStartPublisherRes struct { |
|
Stream *stream.Stream |
|
Err error |
|
} |
|
|
|
// PathStartPublisherReq contains arguments of StartPublisher(). |
|
type PathStartPublisherReq struct { |
|
Author Publisher |
|
Desc *description.Session |
|
GenerateRTPPackets bool |
|
Res chan PathStartPublisherRes |
|
} |
|
|
|
// PathStopPublisherReq contains arguments of StopPublisher(). |
|
type PathStopPublisherReq struct { |
|
Author Publisher |
|
Res chan struct{} |
|
} |
|
|
|
// PathAddReaderRes contains the response of AddReader(). |
|
type PathAddReaderRes struct { |
|
Path Path |
|
Stream *stream.Stream |
|
Err error |
|
} |
|
|
|
// PathAddReaderReq contains arguments of AddReader(). |
|
type PathAddReaderReq struct { |
|
Author Reader |
|
AccessRequest PathAccessRequest |
|
Res chan PathAddReaderRes |
|
} |
|
|
|
// PathRemoveReaderReq contains arguments of RemoveReader(). |
|
type PathRemoveReaderReq struct { |
|
Author Reader |
|
Res chan struct{} |
|
} |
|
|
|
// PathSourceStaticSetReadyRes contains the response of SetReadu(). |
|
type PathSourceStaticSetReadyRes struct { |
|
Stream *stream.Stream |
|
Err error |
|
} |
|
|
|
// PathSourceStaticSetReadyReq contains arguments of SetReady(). |
|
type PathSourceStaticSetReadyReq struct { |
|
Desc *description.Session |
|
GenerateRTPPackets bool |
|
Res chan PathSourceStaticSetReadyRes |
|
} |
|
|
|
// PathSourceStaticSetNotReadyReq contains arguments of SetNotReady(). |
|
type PathSourceStaticSetNotReadyReq struct { |
|
Res chan struct{} |
|
}
|
|
|