rtsp

package
v0.0.0-...-231556c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RtpProfileInvalid = iota - 1 // invalid
	RtpProfileAVP
	RtpProfileAVPF
	RtpProfileSAVP
	RtpProfileSAVPF
)
View Source
const (
	RtpProfileAVPStr   = "rtp/avp"
	RtpProfileAVPFStr  = "rtp/avpf"
	RtpProfileSAVPStr  = "rtp/savp"
	RtpProfileSAVPFStr = "rtp/savpf"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AnnounceRequest

type AnnounceRequest struct {
	IRequest
}

AnnounceRequest is a RTSP ANNOUNCE request

type Client

type Client struct {
	Url   string
	Write WriteHandler
	// contains filtered or unexported fields
}

func NewClient

func NewClient(write WriteHandler) *Client

func (*Client) Feed

func (c *Client) Feed(buf []byte) (int, error)

func (*Client) NewAnnounceRequest

func (c *Client) NewAnnounceRequest() *AnnounceRequest

func (*Client) NewDescribeRequest

func (c *Client) NewDescribeRequest(sdp string) *DescribeRequest

func (*Client) NewGetParameterRequest

func (c *Client) NewGetParameterRequest() *GetParameterRequest

func (*Client) NewOptionsRequest

func (c *Client) NewOptionsRequest() *OptionsRequest

func (*Client) NewPauseRequest

func (c *Client) NewPauseRequest() *PauseRequest

func (*Client) NewPlayRequest

func (c *Client) NewPlayRequest() *PlayRequest

func (*Client) NewRecordRequest

func (c *Client) NewRecordRequest() *RecordRequest

func (*Client) NewRequest

func (c *Client) NewRequest(method string) *Request

func (*Client) NewSetParameterRequest

func (c *Client) NewSetParameterRequest() *SetParameterRequest

func (*Client) NewSetupRequest

func (c *Client) NewSetupRequest(trackId int, transport *Transport) *SetupRequest

func (*Client) NewTeardownRequest

func (c *Client) NewTeardownRequest() *TeardownRequest

func (*Client) SetUrl

func (c *Client) SetUrl(url string)

func (*Client) State

func (c *Client) State() State

type DescribeRequest

type DescribeRequest struct {
	IRequest
}

DescribeRequest is a RTSP DESCRIBE request

func (*DescribeRequest) Accept

func (req *DescribeRequest) Accept() string

func (*DescribeRequest) SetSdp

func (req *DescribeRequest) SetSdp(sdp string)

type DescribeResponse

type DescribeResponse struct {
	IResponse
}

DescribeResponse is a RTSP DESCRIBE request

func (*DescribeResponse) ContentBase

func (resp *DescribeResponse) ContentBase() string

func (*DescribeResponse) ContentType

func (resp *DescribeResponse) ContentType() string

func (*DescribeResponse) Describe

func (resp *DescribeResponse) Describe() string

func (*DescribeResponse) SetContentBase

func (resp *DescribeResponse) SetContentBase(base string)

func (*DescribeResponse) SetContentType

func (resp *DescribeResponse) SetContentType(contentType string)

type GetParameterRequest

type GetParameterRequest struct {
	IRequest
}

GetParameterRequest is a RTSP GET_PARAMETER request

type HeaderLines

type HeaderLines map[string]string

func (HeaderLines) String

func (lines HeaderLines) String() string

type IRequest

type IRequest interface {
	Url() string
	MethodStr() string
	GetLine(key string) string
	SetLine(key, value string)
	String() string
	CSeq() int
	Session() string
	ContentType() string
	GetContent() []byte
	SetContent(content string)
}

type IResponse

type IResponse interface {
	String() string
	CSeq() int
	Session() string
	//	Transport() (*Transport, error)
	ContentLength() int
	Expires() string
	LastModified() string
	Server() string
	Content() []byte
	SetContent(content string)
	Line(key string) string
	SetLine(key, value string)
	Option() *OptionsResponse
}

type IRtspListener

type IRtspListener interface {
	OnTrackRemote(track *TrackRemote) error
	OnTransport(t *Transport) error
}

type IServSession

type IServSession interface {
	AddParams(k, v interface{})
	GetParams(k interface{}) (interface{}, bool)
	DeleteParams(k interface{})
	SetEventListener(listener IServSessionEventListener)
	GetEventListener() IServSessionEventListener
	Logger() Logger
}

type IServSessionEventListener

type IServSessionEventListener interface {
	OnDescribe(serv *Serv) error
	OnAnnounce(serv *Serv) error
	OnPause(serv *Serv) error
	OnResume(serv *Serv) error
	OnStream(serv *Serv) error
}

type IServerEventListener

type IServerEventListener interface {
	OnShutdown(s *Server)
	OnConnect(ss IServSession)
	OnDisconnect(ss IServSession)
}

type ISessionProvider

type ISessionProvider interface {
	NewOrGet() IServSession
}

type Logger

type Logger interface {
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Warnf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
}

type MethodEnum

type MethodEnum int
const (
	UnknownMethod MethodEnum = iota - 1
	OptionsMethod
	DescribeMethod
	AnnounceMethod
	SetupMethod
	PlayMethod
	PauseMethod
	TeardownMethod
	GetParameterMethod
	SetParameterMethod
	RecordMethod
)

type Options

type Options struct {

	// ReuseAddr indicates whether to set up the SO_REUSEADDR socket option.
	ReuseAddr bool

	// ReusePort indicates whether to set up the SO_REUSEPORT socket option.
	ReusePort bool

	// TCPKeepAlive sets up a duration for (SO_KEEPALIVE) socket option.
	TCPKeepAlive time.Duration

	// TCPNoDelay enables/disables the TCP_NODELAY socket option.
	TCPNoDelay bool

	// LockOSThread enables/disables the runtime.LockOSThread() call.
	LockOSThread bool

	// SocketRecvBuffer sets the maximum socket receive buffer in bytes.
	SocketRecvBuffer int

	// SocketSendBuffer sets the maximum socket send buffer in bytes.
	SocketSendBuffer int

	// Logger is the logger for the server.
	Logger Logger

	// NumEventLoop is the number of event loops.
	NumEventLoop int

	// Multicore enables/disables the multi-core execution.
	Multicore bool

	// IdleTimeout is the maximum duration for the connection to be idle.
	IdleTimeout time.Duration
}

type OptionsRequest

type OptionsRequest struct {
	IRequest
}

OptionsRequest is a RTSP OPTIONS request

func (*OptionsRequest) ProxyRequire

func (req *OptionsRequest) ProxyRequire() string

func (*OptionsRequest) Require

func (req *OptionsRequest) Require() string

type OptionsResponse

type OptionsResponse struct {
	IResponse
}

OptionsResponse is a RTSP OPTIONS request

func (*OptionsResponse) Public

func (resp *OptionsResponse) Public() []string

func (*OptionsResponse) SetOptions

func (resp *OptionsResponse) SetOptions(options []string)

type PauseRequest

type PauseRequest struct {
	IRequest
}

PauseRequest is a RTSP PAUSE request

func (*PauseRequest) Range

func (req *PauseRequest) Range() string

type PlayRequest

type PlayRequest struct {
	IRequest
}

PlayRequest is a RTSP PLAY request

func (*PlayRequest) Range

func (req *PlayRequest) Range() string

type RecordRequest

type RecordRequest struct {
	IRequest
}

RecordRequest is a RTSP RECORD request

type Request

type Request struct {
	// contains filtered or unexported fields
}

func UnmarshalRequest

func UnmarshalRequest(buf []byte) (*Request, int, error)

func (*Request) Announce

func (req *Request) Announce() *AnnounceRequest

func (*Request) CSeq

func (req *Request) CSeq() int

func (*Request) ContentType

func (req *Request) ContentType() string

func (*Request) Describe

func (req *Request) Describe() *DescribeRequest

func (*Request) GetContent

func (req *Request) GetContent() []byte

func (*Request) GetLine

func (req *Request) GetLine(key string) string

func (*Request) GetParameter

func (req *Request) GetParameter() *GetParameterRequest

func (*Request) Method

func (req *Request) Method() MethodEnum

func (*Request) MethodStr

func (req *Request) MethodStr() string

func (*Request) Option

func (req *Request) Option() *OptionsRequest

func (*Request) Pause

func (req *Request) Pause() *PauseRequest

func (*Request) Play

func (req *Request) Play() *PlayRequest

func (*Request) Record

func (req *Request) Record() *RecordRequest

func (*Request) Session

func (req *Request) Session() string

func (*Request) SetContent

func (req *Request) SetContent(content string)

func (*Request) SetLine

func (req *Request) SetLine(key, value string)

func (*Request) SetParameter

func (req *Request) SetParameter() *SetParameterRequest

func (*Request) Setup

func (req *Request) Setup() *SetupRequest

func (*Request) String

func (req *Request) String() string

func (*Request) Teardown

func (req *Request) Teardown() *TeardownRequest

func (*Request) Url

func (req *Request) Url() string

type Response

type Response struct {
	// contains filtered or unexported fields
}

func NewResponse

func NewResponse(cseq int, status Status) *Response

func UnmarshalResponse

func UnmarshalResponse(buf []byte) (*Response, int, error)

func (*Response) CSeq

func (resp *Response) CSeq() int

func (*Response) Content

func (resp *Response) Content() []byte

func (*Response) ContentLength

func (resp *Response) ContentLength() int

func (*Response) Describe

func (resp *Response) Describe() *DescribeResponse

func (*Response) Expires

func (resp *Response) Expires() string

func (*Response) LastModified

func (resp *Response) LastModified() string

func (*Response) Line

func (resp *Response) Line(key string) string

func (*Response) Option

func (resp *Response) Option() *OptionsResponse

func (*Response) Server

func (resp *Response) Server() string

func (*Response) Session

func (resp *Response) Session() string

func (*Response) SetContent

func (resp *Response) SetContent(content string)

func (*Response) SetLine

func (resp *Response) SetLine(key, value string)

func (*Response) String

func (resp *Response) String() string

type RtpProfile

type RtpProfile int

func (*RtpProfile) Parse

func (r *RtpProfile) Parse(s string) error

func (RtpProfile) String

func (r RtpProfile) String() string

type RtspRole

type RtspRole int

type Serv

type Serv struct {
	// contains filtered or unexported fields
}

func NewServ

func NewServ(ss IServSession, options ServOptions) *Serv

func (*Serv) AnnounceProcess

func (serv *Serv) AnnounceProcess(req *Request) error

func (*Serv) DescribeProcess

func (serv *Serv) DescribeProcess(req *Request) error

func (*Serv) Feed

func (serv *Serv) Feed(buf []byte) (int, error)

func (*Serv) GetDescription

func (serv *Serv) GetDescription() []byte

func (*Serv) GetParameterProcess

func (serv *Serv) GetParameterProcess(req *Request) error

func (*Serv) Logger

func (serv *Serv) Logger() Logger

func (*Serv) OptionsProcess

func (serv *Serv) OptionsProcess(req *Request) error

func (*Serv) PauseProcess

func (serv *Serv) PauseProcess(req *Request) error

func (*Serv) PlayProcess

func (serv *Serv) PlayProcess(req *Request) error

func (*Serv) SetDescribe

func (serv *Serv) SetDescribe(desc string)

func (*Serv) SetParameterProcess

func (serv *Serv) SetParameterProcess(req *Request) error

func (*Serv) SetupProcess

func (serv *Serv) SetupProcess(req *Request) error

func (*Serv) State

func (serv *Serv) State() State

func (*Serv) TeardownProcess

func (serv *Serv) TeardownProcess(req *Request) error

func (*Serv) WriteResponse

func (serv *Serv) WriteResponse(resp IResponse) error

func (*Serv) WriteResponseStatus

func (serv *Serv) WriteResponseStatus(cseq int, status Status) error

type ServOptions

type ServOptions struct {
	IdleTimeout time.Duration `json:"idleTimeout,omitempty" p:"idleTimeout"` // idle timeout
	Logger      Logger
	Write       WriteHandler
}

type ServSession

type ServSession struct {
	// contains filtered or unexported fields
}

func NewServSession

func NewServSession(listener IServSessionEventListener) *ServSession

func (*ServSession) AddParams

func (ss *ServSession) AddParams(k, v interface{})

func (*ServSession) DeleteParams

func (ss *ServSession) DeleteParams(k interface{})

func (*ServSession) GetEventListener

func (ss *ServSession) GetEventListener() IServSessionEventListener

func (*ServSession) GetParams

func (ss *ServSession) GetParams(k interface{}) (interface{}, bool)

func (*ServSession) Logger

func (ss *ServSession) Logger() Logger

func (*ServSession) SetEventListener

func (ss *ServSession) SetEventListener(listener IServSessionEventListener)

type Server

type Server struct {
	gnet.EventServer
	// contains filtered or unexported fields
}

func NewServer

func NewServer(eventListener IServerEventListener, provider ISessionProvider, addr string, opt Options) (*Server, error)

func (*Server) Decode

func (s *Server) Decode(c gnet.Conn) ([]byte, error)

func (*Server) Encode

func (s *Server) Encode(c gnet.Conn, buf []byte) ([]byte, error)

func (*Server) OnClosed

func (s *Server) OnClosed(c gnet.Conn, err error) (action gnet.Action)

func (*Server) OnInitComplete

func (s *Server) OnInitComplete(gs gnet.Server) (action gnet.Action)

func (*Server) OnOpened

func (s *Server) OnOpened(c gnet.Conn) (out []byte, action gnet.Action)

func (*Server) OnShutdown

func (s *Server) OnShutdown(gs gnet.Server)

func (*Server) Run

func (s *Server) Run() error

func (*Server) Shutdown

func (s *Server) Shutdown(ctx context.Context) error

type SetParameterRequest

type SetParameterRequest struct {
	IRequest
}

SetParameterRequest is a RTSP SET_PARAMETER request

type SetupRequest

type SetupRequest struct {
	IRequest
}

SetupRequest is a RTSP SETUP request

func (*SetupRequest) SetTransport

func (req *SetupRequest) SetTransport(transport *Transport)

func (*SetupRequest) Transport

func (req *SetupRequest) Transport() (*Transport, error)

func (*SetupRequest) TransportString

func (req *SetupRequest) TransportString() string

type SetupResponse

type SetupResponse struct {
	IResponse
}

func NewSetupResponse

func NewSetupResponse(cseq int, status Status, transport *Transport) *SetupResponse

func (*SetupResponse) SetTransport

func (resp *SetupResponse) SetTransport(transport *Transport)

func (*SetupResponse) Transport

func (resp *SetupResponse) Transport() (*Transport, error)

type State

type State int
const (
	EmptyState State = iota
	OptionsState
	DescribeState
	SetupState
	PlayState
	PauseState
	TeardownState
)

type Status

type Status int
const (
	StatusContinue               Status = 100
	StatusOK                     Status = 200
	StatusCreated                Status = 201
	StatusLowOnStorageSpace      Status = 250
	StatusMultipleChoices        Status = 300
	StatusMovedPermanently       Status = 301
	StatusMovedTemporarily       Status = 302
	StatusSeeOther               Status = 303
	StatusNotModified            Status = 304
	StatusUseProxy               Status = 305
	StatusBadRequest             Status = 400
	StatusUnauthorized           Status = 401
	StatusPaymentRequired        Status = 402
	StatusForbidden              Status = 403
	StatusNotFound               Status = 404
	StatusMethodNotAllowed       Status = 405
	StatusNotAcceptable          Status = 406
	StatusProxyAuthRequired      Status = 407
	StatusRequestTimeout         Status = 408
	StatusGone                   Status = 410
	StatusLengthRequired         Status = 411
	StatusPreconditionFailed     Status = 412
	StatusRequestEntityTooLarge  Status = 413
	StatusRequestURITooLarge     Status = 414
	StatusUnsupportedMediaType   Status = 415
	StatusParameterNotUnderstood Status = 451
	StatusConferenceNotFound     Status = 452
	StatusNotEnoughBandwidth     Status = 453
	StatusSessionNotFound        Status = 454
	StatusMethodNotValid         Status = 455
	StatusHeaderFieldNotValid    Status = 456
	StatusInvalidRange           Status = 457
	StatusParameterIsReadOnly    Status = 458
	StatusAggregateNotAllowed    Status = 459
	StatusOnlyAggregateAllowed   Status = 460
	StatusUnsupportedTransport   Status = 461
	StatusDestinationUnreachable Status = 462
	StatusKeyManagementFailure   Status = 463
	StatusInternalServerError    Status = 500
	StatusNotImplemented         Status = 501
	StatusBadGateway             Status = 502
	StatusServiceUnavailable     Status = 503
	StatusGatewayTimeout         Status = 504
	StatusVersionNotSupported    Status = 505
	StatusOptionNotSupported     Status = 551
)

100 - Continue 200 - OK 201 - Created 250 - Low on Storage Space 300 - Multiple Choices 301 - Moved Permanently 302 - Moved Temporarily 303 - See Other 304 - Not Modified 305 - Use Proxy 400 - Bad Request 401 - Unauthorized 402 - Payment Required 403 - Forbidden 404 - Not Found 405 - Method Not Allowed 406 - Not Acceptable 407 - Proxy Authentication Required 408 - Request Time-out 410 - Gone 411 - Length Required 412 - Precondition Failed 413 - Request Entity Too Large 414 - Request-URI Too Large 415 - Unsupported Media Type 451 - Parameter Not Understood 452 - Conference Not Found 453 - Not Enough Bandwidth 454 - Session Not Found 455 - Method Not Valid in This State 456 - Header Field Not Valid for Resource 457 - Invalid Range 458 - Parameter Is Read-Only 459 - Aggregate operation not allowed 460 - Only aggregate operation allowed 461 - Unsupported transport 462 - Destination unreachable 463 - Key management Failure 500 - Internal Server Error 501 - Not Implemented 502 - Bad Gateway 503 - Service Unavailable 504 - Gateway Time-out 505 - RTSP Version not supported 551 - Option not supported

func (Status) String

func (status Status) String() string

type TeardownRequest

type TeardownRequest struct {
	IRequest
}

TeardownRequest is a RTSP TEARDOWN request

type TrackRemote

type TrackRemote struct {
}

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

func NewTcpTransport

func NewTcpTransport(profile RtpProfile, interleaveds []int) *Transport

func NewUdpTransport

func NewUdpTransport(profile RtpProfile, clientPorts []int) *Transport

func UnmarshalTransport

func UnmarshalTransport(s string) (*Transport, error)

func (*Transport) RtcpInterleaved

func (t *Transport) RtcpInterleaved() int

func (*Transport) RtcpPort

func (t *Transport) RtcpPort() int

func (*Transport) RtpInterleaved

func (t *Transport) RtpInterleaved() int

func (*Transport) RtpPort

func (t *Transport) RtpPort() int

func (*Transport) SetSSRC

func (t *Transport) SetSSRC(s int32)

func (*Transport) String

func (t *Transport) String() string

type TransportType

type TransportType int
const (
	TransportTypeTcp TransportType = iota
	TransportTypeUdp
)

type Url

type Url struct {
	Scheme   string
	Host     string
	Port     int
	Path     string
	User     string
	Password string
	Args     map[string]string
}

func (*Url) ClearArgs

func (u *Url) ClearArgs()

func (*Url) DelArg

func (u *Url) DelArg(key string)

func (*Url) GetArg

func (u *Url) GetArg(key string) string

func (*Url) GetArgs

func (u *Url) GetArgs() map[string]string

func (*Url) GetHost

func (u *Url) GetHost() string

func (*Url) GetPassword

func (u *Url) GetPassword() string

func (*Url) GetPath

func (u *Url) GetPath() string

func (*Url) GetPort

func (u *Url) GetPort() int

func (*Url) GetUser

func (u *Url) GetUser() string

func (*Url) HasArg

func (u *Url) HasArg(key string) bool

func (*Url) Parse

func (u *Url) Parse(s string) error

func (*Url) SetArg

func (u *Url) SetArg(key, value string)

func (*Url) SetArgs

func (u *Url) SetArgs(args map[string]string)

func (*Url) SetHost

func (u *Url) SetHost(host string)

func (*Url) SetPassword

func (u *Url) SetPassword(password string)

func (*Url) SetPath

func (u *Url) SetPath(path string)

func (*Url) SetPort

func (u *Url) SetPort(port int)

func (*Url) SetUser

func (u *Url) SetUser(user string)

func (*Url) String

func (u *Url) String() string

type WriteHandler

type WriteHandler func(date []byte) error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL