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/ogsts/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 (*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
|
|
|
client-publish
command
|
|
|
client-publish-options
command
|
|
|
client-publish-pause
command
|
|
|
client-query
command
|
|
|
client-read
command
|
|
|
client-read-h264
command
|
|
|
client-read-options
command
|
|
|
client-read-partial
command
|
|
|
client-read-pause
command
|
|
|
client-read-save-to-disk
command
|
|
|
server
command
|
|
|
server-tls
command
|
|
|
pkg
|
|
|
aac
Package aac contains utilities to work with the MPEG-AAC codec.
|
Package aac contains utilities to work with the MPEG-AAC codec. |
|
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. |
|
h264
Package h264 contains utilities to work with the H264 codec.
|
Package h264 contains utilities to work with the H264 codec. |
|
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. |