mediamtx/internal/client/client.go
2021-03-23 21:50:25 +01:00

144 lines
2.8 KiB
Go

package client
import (
"fmt"
"github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/base"
"github.com/aler9/gortsplib/pkg/headers"
"github.com/aler9/rtsp-simple-server/internal/conf"
"github.com/aler9/rtsp-simple-server/internal/streamproc"
)
// ErrNoOnePublishing is a "no one is publishing" error.
type ErrNoOnePublishing struct {
PathName string
}
// Error implements the error interface.
func (e ErrNoOnePublishing) Error() string {
return fmt.Sprintf("no one is publishing to path '%s'", e.PathName)
}
// ErrAuthNotCritical is a non-critical authentication error.
type ErrAuthNotCritical struct {
*base.Response
}
// Error implements the error interface.
func (ErrAuthNotCritical) Error() string {
return "non-critical authentication error"
}
// ErrAuthCritical is a critical authentication error.
type ErrAuthCritical struct {
*base.Response
}
// Error implements the error interface.
func (ErrAuthCritical) Error() string {
return "critical authentication error"
}
// Path is implemented by path.Path.
type Path interface {
Name() string
Conf() *conf.PathConf
OnClientRemove(RemoveReq)
OnClientPlay(PlayReq)
OnClientRecord(RecordReq)
OnClientPause(PauseReq)
}
// DescribeRes is a describe response.
type DescribeRes struct {
SDP []byte
Redirect string
Err error
}
// DescribeReq is a describe request.
type DescribeReq struct {
Client Client
PathName string
Data *base.Request
Res chan DescribeRes
}
// SetupPlayRes is a setup/play response.
type SetupPlayRes struct {
Path Path
Tracks gortsplib.Tracks
Err error
}
// SetupPlayReq is a setup/play request.
type SetupPlayReq struct {
Client Client
PathName string
Data interface{}
Res chan SetupPlayRes
}
// AnnounceRes is a announce response.
type AnnounceRes struct {
Path Path
Err error
}
// AnnounceReq is a announce request.
type AnnounceReq struct {
Client Client
PathName string
Tracks gortsplib.Tracks
Data interface{}
Res chan AnnounceRes
}
// RemoveReq is a remove request.
type RemoveReq struct {
Client Client
Res chan struct{}
}
// PlayRes is a play response.
type PlayRes struct {
TrackInfos []streamproc.TrackInfo
}
// PlayReq is a play request.
type PlayReq struct {
Client Client
Res chan PlayRes
}
// RecordRes is a record response.
type RecordRes struct {
SP *streamproc.StreamProc
Err error
}
// RecordReq is a record request.
type RecordReq struct {
Client Client
Res chan RecordRes
}
// PauseReq is a pause request.
type PauseReq struct {
Client Client
Res chan struct{}
}
// Client is implemented by all client*.
type Client interface {
IsClient()
IsSource()
Close()
Authenticate([]headers.AuthMethod,
string, []interface{},
string, string, interface{}) error
OnFrame(int, gortsplib.StreamType, []byte)
}