Documentation ¶
Overview ¶
Package gortsplib is a RTSP 1.0 library for the Go programming language, written for rtsp-simple-server.
Examples are available at https://github.com/rsheasby/gortsplib/tree/master/examples
Index ¶
- Variables
- type Client
- func (c *Client) Dial(scheme string, host string) (*ClientConn, error)
- func (c *Client) DialPublish(address string, tracks Tracks) (*ClientConn, error)
- func (c *Client) DialPublishContext(ctx context.Context, address string, tracks Tracks) (*ClientConn, error)
- func (c *Client) DialRead(address string) (*ClientConn, error)
- func (c *Client) DialReadContext(ctx context.Context, address string) (*ClientConn, error)
- type ClientConn
- func (cc *ClientConn) Announce(u *base.URL, tracks Tracks) (*base.Response, error)
- func (cc *ClientConn) Close() error
- func (cc *ClientConn) Describe(u *base.URL) (Tracks, *base.URL, *base.Response, error)
- func (cc *ClientConn) Options(u *base.URL) (*base.Response, error)
- func (cc *ClientConn) Pause() (*base.Response, error)
- func (cc *ClientConn) Play(ra *headers.Range) (*base.Response, error)
- func (cc *ClientConn) ReadFrames(onFrame func(int, StreamType, []byte)) error
- func (cc *ClientConn) Record() (*base.Response, error)
- func (cc *ClientConn) Seek(ra *headers.Range) (*base.Response, error)
- func (cc *ClientConn) Setup(mode headers.TransportMode, baseURL *base.URL, track *Track, rtpPort int, ...) (*base.Response, error)
- func (cc *ClientConn) Tracks() Tracks
- func (cc *ClientConn) WriteFrame(trackID int, streamType StreamType, payload []byte) error
- type ClientProtocol
- type Server
- type ServerConn
- type ServerHandler
- type ServerHandlerOnAnnounce
- type ServerHandlerOnAnnounceCtx
- type ServerHandlerOnConnClose
- type ServerHandlerOnConnCloseCtx
- type ServerHandlerOnConnOpen
- type ServerHandlerOnConnOpenCtx
- type ServerHandlerOnDescribe
- type ServerHandlerOnDescribeCtx
- type ServerHandlerOnFrame
- type ServerHandlerOnFrameCtx
- type ServerHandlerOnGetParameter
- type ServerHandlerOnGetParameterCtx
- type ServerHandlerOnPause
- type ServerHandlerOnPauseCtx
- type ServerHandlerOnPlay
- type ServerHandlerOnPlayCtx
- type ServerHandlerOnRecord
- type ServerHandlerOnRecordCtx
- type ServerHandlerOnRequest
- type ServerHandlerOnResponse
- type ServerHandlerOnSessionClose
- type ServerHandlerOnSessionCloseCtx
- type ServerHandlerOnSessionOpen
- type ServerHandlerOnSessionOpenCtx
- type ServerHandlerOnSetParameter
- type ServerHandlerOnSetParameterCtx
- type ServerHandlerOnSetup
- type ServerHandlerOnSetupCtx
- type ServerSession
- func (ss *ServerSession) AnnouncedTracks() []ServerSessionAnnouncedTrack
- func (ss *ServerSession) Close() error
- func (ss *ServerSession) SetuppedDelivery() *base.StreamDelivery
- func (ss *ServerSession) SetuppedProtocol() *base.StreamProtocol
- func (ss *ServerSession) SetuppedTracks() map[int]ServerSessionSetuppedTrack
- func (ss *ServerSession) State() ServerSessionState
- func (ss *ServerSession) WriteFrame(trackID int, streamType StreamType, payload []byte)
- type ServerSessionAnnouncedTrack
- type ServerSessionSetuppedTrack
- type ServerSessionState
- type ServerStream
- type StreamType
- type Track
- type TrackConfigAAC
- type TrackConfigH264
- type Tracks
Constants ¶
This section is empty.
Variables ¶
var DefaultClient = &Client{}
DefaultClient is the default Client.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct { // // connection // // timeout of read operations. // It defaults to 10 seconds. ReadTimeout time.Duration // timeout of write operations. // It defaults to 10 seconds. WriteTimeout time.Duration // a TLS configuration to connect to TLS (RTSPS) servers. // It defaults to &tls.Config{InsecureSkipVerify:true} TLSConfig *tls.Config // // initialization // // disable being redirected to other servers, that can happen during Describe(). // It defaults to false. RedirectDisable bool // enable communication with servers which don't provide server ports. // this can be a security issue. // It defaults to false. AnyPortEnable bool // // reading / writing // // the stream protocol (UDP, Multicast or TCP). // If nil, it is chosen automatically (first UDP, then, if it fails, TCP). // It defaults to nil. Protocol *ClientProtocol // If the client is reading with UDP, it must receive // at least a packet within this timeout. // It defaults to 3 seconds. InitialUDPReadTimeout time.Duration // read buffer count. // If greater than 1, allows to pass buffers to routines different than the one // that is reading frames. // It defaults to 1. ReadBufferCount int // read buffer size. // This must be touched only when the server reports problems about buffer sizes. // It defaults to 2048. ReadBufferSize int // // callbacks // // callback called before every request. OnRequest func(req *base.Request) // callback called after every response. OnResponse func(res *base.Response) // // system functions // // function used to initialize the TCP client. // It defaults to (&net.Dialer{}).DialContext. DialContext func(ctx context.Context, network, address string) (net.Conn, error) // function used to initialize UDP listeners. // It defaults to net.ListenPacket. ListenPacket func(network, address string) (net.PacketConn, error) // contains filtered or unexported fields }
Client is a RTSP client.
func (*Client) Dial ¶
func (c *Client) Dial(scheme string, host string) (*ClientConn, error)
Dial connects to a server.
func (*Client) DialPublish ¶
func (c *Client) DialPublish(address string, tracks Tracks) (*ClientConn, error)
DialPublish connects to the address and starts publishing the tracks.
func (*Client) DialPublishContext ¶
func (c *Client) DialPublishContext(ctx context.Context, address string, tracks Tracks) (*ClientConn, error)
DialPublishContext connects to the address with the given context and starts publishing the tracks.
func (*Client) DialRead ¶
func (c *Client) DialRead(address string) (*ClientConn, error)
DialRead connects to the address and starts reading all tracks.
func (*Client) DialReadContext ¶
DialReadContext connects to the address with the given context and starts reading all tracks.
type ClientConn ¶
type ClientConn struct {
// contains filtered or unexported fields
}
ClientConn is a client-side RTSP connection.
func DialPublish ¶
func DialPublish(address string, tracks Tracks) (*ClientConn, error)
DialPublish connects to a server and starts publishing the tracks.
func DialRead ¶
func DialRead(address string) (*ClientConn, error)
DialRead connects to a server and starts reading all tracks.
func (*ClientConn) Close ¶
func (cc *ClientConn) Close() error
Close closes the connection and waits for all its resources to exit.
func (*ClientConn) Pause ¶
func (cc *ClientConn) Pause() (*base.Response, error)
Pause writes a PAUSE request and reads a Response. This can be called only after Play() or Record().
func (*ClientConn) Play ¶
Play writes a PLAY request and reads a Response. This can be called only after Setup().
func (*ClientConn) ReadFrames ¶
func (cc *ClientConn) ReadFrames(onFrame func(int, StreamType, []byte)) error
ReadFrames starts reading frames.
func (*ClientConn) Record ¶
func (cc *ClientConn) Record() (*base.Response, error)
Record writes a RECORD request and reads a Response. This can be called only after Announce() and Setup().
func (*ClientConn) Setup ¶
func (cc *ClientConn) Setup( mode headers.TransportMode, baseURL *base.URL, track *Track, rtpPort int, rtcpPort int) (*base.Response, error)
Setup writes a SETUP request and reads a Response. rtpPort and rtcpPort are used only if protocol is UDP. if rtpPort and rtcpPort are zero, they are chosen automatically.
func (*ClientConn) Tracks ¶
func (cc *ClientConn) Tracks() Tracks
Tracks returns all the tracks that the connection is reading or publishing.
func (*ClientConn) WriteFrame ¶
func (cc *ClientConn) WriteFrame(trackID int, streamType StreamType, payload []byte) error
WriteFrame writes a frame.
type ClientProtocol ¶
type ClientProtocol int
ClientProtocol is a RTSP stream protocol used by the client.
const ( ClientProtocolUDP ClientProtocol = iota ClientProtocolMulticast ClientProtocolTCP )
standard RTSP stream protocols.
type Server ¶
type Server struct { // // handler // // an handler interface to handle requests. Handler ServerHandler // // RTSP parameters // // timeout of read operations. // It defaults to 10 seconds ReadTimeout time.Duration // timeout of write operations. // It defaults to 10 seconds WriteTimeout time.Duration // a TLS configuration to accept TLS (RTSPS) connections. TLSConfig *tls.Config // a port to send and receive RTP packets with UDP. // If UDPRTPAddress and UDPRTCPAddress are filled, the server can read and write UDP streams. UDPRTPAddress string // a port to send and receive RTCP packets with UDP. // If UDPRTPAddress and UDPRTCPAddress are filled, the server can read and write UDP streams. UDPRTCPAddress string // a range of multicast IPs to use. // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. MulticastIPRange string // a port to send RTP packets with UDP-multicast. // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. MulticastRTPPort int // a port to send RTCP packets with UDP-multicast. // If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server can read and write UDP-multicast streams. MulticastRTCPPort int // read buffer count. // If greater than 1, allows to pass buffers to routines different than the one // that is reading frames. // It also allows to buffer routed frames and mitigate network fluctuations // that are particularly high when using UDP. // It defaults to 512 ReadBufferCount int // read buffer size. // This must be touched only when the server reports problems about buffer sizes. // It defaults to 2048. ReadBufferSize int // // system functions // // function used to initialize the TCP listener. // It defaults to net.Listen. Listen func(network string, address string) (net.Listener, error) // function used to initialize UDP listeners. // It defaults to net.ListenPacket. ListenPacket func(network, address string) (net.PacketConn, error) // contains filtered or unexported fields }
Server is a RTSP server.
func (*Server) StartAndWait ¶
StartAndWait starts the server and waits until a fatal error.
type ServerConn ¶
type ServerConn struct {
// contains filtered or unexported fields
}
ServerConn is a server-side RTSP connection.
func NewServerConn ¶
func NewServerConn(s *Server, nconn net.Conn) *ServerConn
NewServerConn creates a new server connection from an existing network connection. This is useful for reusing connections hijacked from another server.
func (*ServerConn) NetConn ¶
func (sc *ServerConn) NetConn() net.Conn
NetConn returns the underlying net.Conn.
type ServerHandler ¶
type ServerHandler interface{}
ServerHandler is the interface implemented by all the server handlers.
type ServerHandlerOnAnnounce ¶
type ServerHandlerOnAnnounce interface {
OnAnnounce(*ServerHandlerOnAnnounceCtx) (*base.Response, error)
}
ServerHandlerOnAnnounce can be implemented by a ServerHandler.
type ServerHandlerOnAnnounceCtx ¶
type ServerHandlerOnAnnounceCtx struct { Server *Server Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string Tracks Tracks }
ServerHandlerOnAnnounceCtx is the context of an ANNOUNCE request.
type ServerHandlerOnConnClose ¶
type ServerHandlerOnConnClose interface {
OnConnClose(*ServerHandlerOnConnCloseCtx)
}
ServerHandlerOnConnClose can be implemented by a ServerHandler.
type ServerHandlerOnConnCloseCtx ¶
type ServerHandlerOnConnCloseCtx struct { Conn *ServerConn Error error }
ServerHandlerOnConnCloseCtx is the context of a connection closure.
type ServerHandlerOnConnOpen ¶
type ServerHandlerOnConnOpen interface {
OnConnOpen(*ServerHandlerOnConnOpenCtx)
}
ServerHandlerOnConnOpen can be implemented by a ServerHandler.
type ServerHandlerOnConnOpenCtx ¶
type ServerHandlerOnConnOpenCtx struct {
Conn *ServerConn
}
ServerHandlerOnConnOpenCtx is the context of a connection opening.
type ServerHandlerOnDescribe ¶
type ServerHandlerOnDescribe interface {
OnDescribe(*ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error)
}
ServerHandlerOnDescribe can be implemented by a ServerHandler.
type ServerHandlerOnDescribeCtx ¶
type ServerHandlerOnDescribeCtx struct { Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnDescribeCtx is the context of a DESCRIBE request.
type ServerHandlerOnFrame ¶
type ServerHandlerOnFrame interface {
OnFrame(*ServerHandlerOnFrameCtx)
}
ServerHandlerOnFrame can be implemented by a ServerHandler.
type ServerHandlerOnFrameCtx ¶
type ServerHandlerOnFrameCtx struct { Session *ServerSession TrackID int StreamType StreamType Payload []byte }
ServerHandlerOnFrameCtx is the context of a frame.
type ServerHandlerOnGetParameter ¶
type ServerHandlerOnGetParameter interface {
OnGetParameter(*ServerHandlerOnGetParameterCtx) (*base.Response, error)
}
ServerHandlerOnGetParameter can be implemented by a ServerHandler.
type ServerHandlerOnGetParameterCtx ¶
type ServerHandlerOnGetParameterCtx struct { Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnGetParameterCtx is the context of a GET_PARAMETER request.
type ServerHandlerOnPause ¶
type ServerHandlerOnPause interface {
OnPause(*ServerHandlerOnPauseCtx) (*base.Response, error)
}
ServerHandlerOnPause can be implemented by a ServerHandler.
type ServerHandlerOnPauseCtx ¶
type ServerHandlerOnPauseCtx struct { Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnPauseCtx is the context of a PAUSE request.
type ServerHandlerOnPlay ¶
type ServerHandlerOnPlay interface {
OnPlay(*ServerHandlerOnPlayCtx) (*base.Response, error)
}
ServerHandlerOnPlay can be implemented by a ServerHandler.
type ServerHandlerOnPlayCtx ¶
type ServerHandlerOnPlayCtx struct { Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnPlayCtx is the context of a PLAY request.
type ServerHandlerOnRecord ¶
type ServerHandlerOnRecord interface {
OnRecord(*ServerHandlerOnRecordCtx) (*base.Response, error)
}
ServerHandlerOnRecord can be implemented by a ServerHandler.
type ServerHandlerOnRecordCtx ¶
type ServerHandlerOnRecordCtx struct { Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnRecordCtx is the context of a RECORD request.
type ServerHandlerOnRequest ¶
type ServerHandlerOnRequest interface {
OnRequest(*ServerConn, *base.Request)
}
ServerHandlerOnRequest can be implemented by a ServerHandler.
type ServerHandlerOnResponse ¶
type ServerHandlerOnResponse interface {
OnResponse(*ServerConn, *base.Response)
}
ServerHandlerOnResponse can be implemented by a ServerHandler.
type ServerHandlerOnSessionClose ¶
type ServerHandlerOnSessionClose interface {
OnSessionClose(*ServerHandlerOnSessionCloseCtx)
}
ServerHandlerOnSessionClose can be implemented by a ServerHandler.
type ServerHandlerOnSessionCloseCtx ¶
type ServerHandlerOnSessionCloseCtx struct { Session *ServerSession Error error }
ServerHandlerOnSessionCloseCtx is the context of a session closure.
type ServerHandlerOnSessionOpen ¶
type ServerHandlerOnSessionOpen interface {
OnSessionOpen(*ServerHandlerOnSessionOpenCtx)
}
ServerHandlerOnSessionOpen can be implemented by a ServerHandler.
type ServerHandlerOnSessionOpenCtx ¶
type ServerHandlerOnSessionOpenCtx struct { Session *ServerSession Conn *ServerConn }
ServerHandlerOnSessionOpenCtx is the context of a session opening.
type ServerHandlerOnSetParameter ¶
type ServerHandlerOnSetParameter interface {
OnSetParameter(*ServerHandlerOnSetParameterCtx) (*base.Response, error)
}
ServerHandlerOnSetParameter can be implemented by a ServerHandler.
type ServerHandlerOnSetParameterCtx ¶
type ServerHandlerOnSetParameterCtx struct { Conn *ServerConn Req *base.Request Path string Query string }
ServerHandlerOnSetParameterCtx is the context of a SET_PARAMETER request.
type ServerHandlerOnSetup ¶
type ServerHandlerOnSetup interface { // must return a Response and a stream. // the stream is needed to // - add the session the the stream's readers // - send the stream SSRC to the session OnSetup(*ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) }
ServerHandlerOnSetup can be implemented by a ServerHandler.
type ServerHandlerOnSetupCtx ¶
type ServerHandlerOnSetupCtx struct { Server *Server Session *ServerSession Conn *ServerConn Req *base.Request Path string Query string TrackID int Transport *headers.Transport }
ServerHandlerOnSetupCtx is the context of a OPTIONS request.
type ServerSession ¶
type ServerSession struct {
// contains filtered or unexported fields
}
ServerSession is a server-side RTSP session.
func (*ServerSession) AnnouncedTracks ¶
func (ss *ServerSession) AnnouncedTracks() []ServerSessionAnnouncedTrack
AnnouncedTracks returns the announced tracks.
func (*ServerSession) Close ¶
func (ss *ServerSession) Close() error
Close closes the ServerSession.
func (*ServerSession) SetuppedDelivery ¶
func (ss *ServerSession) SetuppedDelivery() *base.StreamDelivery
SetuppedDelivery returns the delivery method of the setupped tracks.
func (*ServerSession) SetuppedProtocol ¶
func (ss *ServerSession) SetuppedProtocol() *base.StreamProtocol
SetuppedProtocol returns the stream protocol of the setupped tracks.
func (*ServerSession) SetuppedTracks ¶
func (ss *ServerSession) SetuppedTracks() map[int]ServerSessionSetuppedTrack
SetuppedTracks returns the setupped tracks.
func (*ServerSession) State ¶
func (ss *ServerSession) State() ServerSessionState
State returns the state of the session.
func (*ServerSession) WriteFrame ¶
func (ss *ServerSession) WriteFrame(trackID int, streamType StreamType, payload []byte)
WriteFrame writes a frame to the session.
type ServerSessionAnnouncedTrack ¶
type ServerSessionAnnouncedTrack struct {
// contains filtered or unexported fields
}
ServerSessionAnnouncedTrack is an announced track of a ServerSession.
type ServerSessionSetuppedTrack ¶
type ServerSessionSetuppedTrack struct {
// contains filtered or unexported fields
}
ServerSessionSetuppedTrack is a setupped track of a ServerSession.
type ServerSessionState ¶
type ServerSessionState int
ServerSessionState is a state of a ServerSession.
const ( ServerSessionStateInitial ServerSessionState = iota ServerSessionStatePreRead ServerSessionStateRead ServerSessionStatePrePublish ServerSessionStatePublish )
standard states.
func (ServerSessionState) String ¶
func (s ServerSessionState) String() string
String implements fmt.Stringer.
type ServerStream ¶
type ServerStream struct {
// contains filtered or unexported fields
}
ServerStream represents a single stream. This is in charge of - distributing the stream to each reader - allocating multicast listeners - gathering infos about the stream to generate SSRC and RTP-Info
func NewServerStream ¶
func NewServerStream(tracks Tracks) *ServerStream
NewServerStream allocates a ServerStream.
func (*ServerStream) Tracks ¶
func (st *ServerStream) Tracks() Tracks
Tracks returns the tracks of the stream.
func (*ServerStream) WriteFrame ¶
func (st *ServerStream) WriteFrame(trackID int, streamType StreamType, payload []byte)
WriteFrame writes a frame to all the readers of the stream.
type StreamType ¶
type StreamType = base.StreamType
StreamType is the stream type.
const ( // StreamTypeRTP means that the stream contains RTP packets StreamTypeRTP StreamType = base.StreamTypeRTP // StreamTypeRTCP means that the stream contains RTCP packets StreamTypeRTCP StreamType = base.StreamTypeRTCP )
type Track ¶
type Track struct { // attributes in SDP format Media *psdp.MediaDescription }
Track is a RTSP track.
func NewTrackAAC ¶
func NewTrackAAC(payloadType uint8, conf *TrackConfigAAC) (*Track, error)
NewTrackAAC initializes an AAC track.
func NewTrackH264 ¶
func NewTrackH264(payloadType uint8, conf *TrackConfigH264) (*Track, error)
NewTrackH264 initializes an H264 track.
func (*Track) ExtractConfigAAC ¶
func (t *Track) ExtractConfigAAC() (*TrackConfigAAC, error)
ExtractConfigAAC extracts the configuration of an AAC track.
func (*Track) ExtractConfigH264 ¶
func (t *Track) ExtractConfigH264() (*TrackConfigH264, error)
ExtractConfigH264 extracts the configuration of an H264 track.
type TrackConfigAAC ¶
TrackConfigAAC is the configuration of an AAC track.
type TrackConfigH264 ¶
TrackConfigH264 is the configuration of an H264 track.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
examples
|
|
pkg
|
|
auth
Package auth contains utilities to perform authentication.
|
Package auth contains utilities to perform authentication. |
base
Package base contains the base elements of the RTSP protocol.
|
Package base contains the base elements of the RTSP protocol. |
headers
Package headers contains various RTSP headers.
|
Package headers contains various RTSP headers. |
liberrors
Package liberrors contains errors returned by the library.
|
Package liberrors contains errors returned by the library. |
multibuffer
Package multibuffer contains a buffer with multiple levels.
|
Package multibuffer contains a buffer with multiple levels. |
ringbuffer
Package ringbuffer contains a ring buffer.
|
Package ringbuffer contains a ring buffer. |
rtcpreceiver
Package rtcpreceiver contains a utility to generate RTCP receiver reports.
|
Package rtcpreceiver contains a utility to generate RTCP receiver reports. |
rtcpsender
Package rtcpsender contains a utility to generate RTCP sender reports.
|
Package rtcpsender contains a utility to generate RTCP sender reports. |
rtpaac
Package rtpaac contains a RTP/AAC decoder and encoder.
|
Package rtpaac contains a RTP/AAC decoder and encoder. |
rtph264
Package rtph264 contains a RTP/H264 decoder and encoder.
|
Package rtph264 contains a RTP/H264 decoder and encoder. |
sdp
Package sdp contains a SDP encoder/decoder compatible with most RTSP implementations.
|
Package sdp contains a SDP encoder/decoder compatible with most RTSP implementations. |