mediamtx/internal/client/client.go
2021-01-31 23:11:14 +01:00

123 lines
2.4 KiB
Go

package client
import (
"github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/base"
"github.com/aler9/gortsplib/pkg/headers"
"github.com/aler9/rtsp-simple-server/internal/conf"
)
// Client can be
// *clientrtsp.Client
// *clientrtmp.Client
type Client interface {
IsClient()
IsSource()
Close()
Authenticate([]headers.AuthMethod,
string, []interface{},
string, string, interface{}) error
OnReaderFrame(int, gortsplib.StreamType, []byte)
}
// 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"
}
// DescribeRes is a client describe response.
type DescribeRes struct {
SDP []byte
Redirect string
Err error
}
// DescribeReq is a client describe request.
type DescribeReq struct {
Client Client
PathName string
Req *base.Request
Res chan DescribeRes
}
// SetupPlayRes is a setup/play response.
type SetupPlayRes struct {
Path Path
Err error
}
// SetupPlayReq is a setup/play request.
type SetupPlayReq struct {
Client Client
PathName string
TrackID int
Req *base.Request
Res chan SetupPlayRes
}
// AnnounceRes is a client announce response.
type AnnounceRes struct {
Path Path
Err error
}
// AnnounceReq is a client announce request.
type AnnounceReq struct {
Client Client
PathName string
Tracks gortsplib.Tracks
Req interface{}
Res chan AnnounceRes
}
// RemoveReq is a remove request.
type RemoveReq struct {
Client Client
Res chan struct{}
}
// PlayReq is a play request.
type PlayReq struct {
Client Client
Res chan struct{}
}
// RecordReq is a record request.
type RecordReq struct {
Client Client
Res chan struct{}
}
// PauseReq is a pause request.
type PauseReq struct {
Client Client
Res chan struct{}
}
// Path is implemented by path.Path.
type Path interface {
Name() string
SourceTrackCount() int
Conf() *conf.PathConf
OnClientRemove(RemoveReq)
OnClientPlay(PlayReq)
OnClientRecord(RecordReq)
OnClientPause(PauseReq)
OnFrame(int, gortsplib.StreamType, []byte)
}