gortsplib

package module
v0.0.0-...-dd7f0e7 Latest Latest
Warning

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

Go to latest
Published: Sep 6, 2024 License: MIT Imports: 33 Imported by: 0

README

gortsplib

Test Lint Go Report Card CodeCov PkgGoDev

RTSP 1.0 client and server library for the Go programming language, written for MediaMTX.

Go ≥ 1.20 is required.

Features:

  • Client
    • Query servers about available media streams
    • Play (read)
      • Read media streams from servers with the UDP, UDP-multicast or TCP transport protocol
      • Read TLS-encrypted streams (TCP only)
      • Switch transport protocol automatically
      • Read selected media streams
      • Pause or seek without disconnecting from the server
      • Write to ONVIF back channels
      • Get PTS (relative) timestamp of incoming packets
      • Get NTP (absolute) timestamp of incoming packets
    • Record (write)
      • Write media streams to servers with the UDP or TCP transport protocol
      • Write TLS-encrypted streams (TCP only)
      • Switch transport protocol automatically
      • Pause without disconnecting from the server
  • Server
    • Handle requests from clients
    • Record (read)
      • Read media streams from clients with the UDP or TCP transport protocol
      • Read TLS-encrypted streams (TCP only)
      • Get PTS (relative) timestamp of incoming packets
      • Get NTP (absolute) timestamp of incoming packets
    • Play (write)
      • Write media streams to clients with the UDP, UDP-multicast or TCP transport protocol
      • Write TLS-encrypted streams (TCP only)
      • Compute and provide SSRC, RTP-Info to clients
  • Utilities
    • Parse RTSP elements
    • Encode/decode RTP packets into/from codec-specific frames

Table of contents

Examples

API Documentation

Click to open the API Documentation

RTP Payload Formats

In RTSP, media streams are routed between server and clients by using RTP packets, which are encoded in a specific, codec-dependent, format. This library supports formats for the following codecs:

Video
codec documentation encoder and decoder available
AV1 link
VP9 link
VP8 link
H265 link
H264 link
MPEG-4 Video (H263, Xvid) link
MPEG-1/2 Video link
M-JPEG link
Audio
codec documentation encoder and decoder available
Opus link
Vorbis link
MPEG-4 Audio (AAC) link
MPEG-1/2 Audio (MP3) link
AC-3 link
Speex link
G726 link
G722 link
G711 (PCMA, PCMU) link
LPCM link
Other
codec documentation encoder and decoder available
MPEG-TS link

Specifications

name area
RFC2326, RTSP 1.0 protocol
RFC7826, RTSP 2.0 protocol
RFC8866, SDP: Session Description Protocol SDP
RTP Payload Format For AV1 (v1.0) AV1 payload format
RTP Payload Format for VP9 Video VP9 payload format
RFC7741, RTP Payload Format for VP8 Video VP8 payload format
RFC7798, RTP Payload Format for High Efficiency Video Coding (HEVC) H265 payload format
RFC6184, RTP Payload Format for H.264 Video H264 payload format
RFC3640, RTP Payload Format for Transport of MPEG-4 Elementary Streams MPEG-4 audio, MPEG-4 video payload formats
RFC2250, RTP Payload Format for MPEG1/MPEG2 Video MPEG-1 video, MPEG-2 audio, MPEG-TS payload formats
RFC2435, RTP Payload Format for JPEG-compressed Video M-JPEG payload format
RFC7587, RTP Payload Format for the Opus Speech and Audio Codec Opus payload format
Multiopus in libwebrtc Opus payload format
RFC5215, RTP Payload Format for Vorbis Encoded Audio Vorbis payload format
RFC4184, RTP Payload Format for AC-3 Audio AC-3 payload format
RFC6416, RTP Payload Format for MPEG-4 Audio/Visual Streams MPEG-4 audio payload format
RFC5574, RTP Payload Format for the Speex Codec Speex payload format
RFC3551, RTP Profile for Audio and Video Conferences with Minimal Control G726, G722, G711, LPCM payload formats
RFC3190, RTP Payload Format for 12-bit DAT Audio and 20- and 24-bit Linear Sampled Audio LPCM payload format
Codec specifications codecs
Golang project layout project layout

Documentation

Overview

Package gortsplib is a RTSP 1.0 library for the Go programming language.

Examples are available at https://github.com/bluenviron/gortsplib/tree/main/examples

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	//
	// RTSP parameters (all optional)
	//
	// 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 nil.
	TLSConfig *tls.Config
	// enable communication with servers which don't provide UDP server ports
	// or use different server ports than the announced ones.
	// This can be a security issue.
	// It defaults to false.
	AnyPortEnable bool
	// transport protocol (UDP, Multicast or TCP).
	// If nil, it is chosen automatically (first UDP, then, if it fails, TCP).
	// It defaults to nil.
	Transport *Transport
	// If the client is reading with UDP, it must receive
	// at least a packet within this timeout, otherwise it switches to TCP.
	// It defaults to 3 seconds.
	InitialUDPReadTimeout time.Duration
	// Size of the queue of outgoing packets.
	// It defaults to 256.
	WriteQueueSize int
	// maximum size of outgoing RTP / RTCP packets.
	// This must be less than the UDP MTU (1472 bytes).
	// It defaults to 1472.
	MaxPacketSize int
	// user agent header.
	// It defaults to "gortsplib"
	UserAgent string
	// disable automatic RTCP sender reports.
	DisableRTCPSenderReports bool
	// explicitly request back channels to the server.
	RequestBackChannels bool
	// pointer to a variable that stores received bytes.
	BytesReceived *uint64
	// pointer to a variable that stores sent bytes.
	BytesSent *uint64

	//
	// system functions (all optional)
	//
	// 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)

	//
	// callbacks (all optional)
	//
	// called when sending a request to the server.
	OnRequest ClientOnRequestFunc
	// called when receiving a response from the server.
	OnResponse ClientOnResponseFunc
	// called when receiving a request from the server.
	OnServerRequest ClientOnRequestFunc
	// called when sending a response to the server.
	OnServerResponse ClientOnResponseFunc
	// called when the transport protocol changes.
	OnTransportSwitch ClientOnTransportSwitchFunc
	// called when the client detects lost packets.
	OnPacketLost ClientOnPacketLostFunc
	// called when a non-fatal decode error occurs.
	OnDecodeError ClientOnDecodeErrorFunc
	// contains filtered or unexported fields
}

Client is a RTSP client.

func (*Client) Announce

func (c *Client) Announce(u *base.URL, desc *description.Session) (*base.Response, error)

Announce sends an ANNOUNCE request.

func (*Client) Close

func (c *Client) Close()

Close closes all client resources and waits for them to close.

func (*Client) Describe

func (c *Client) Describe(u *base.URL) (*description.Session, *base.Response, error)

Describe sends a DESCRIBE request.

func (*Client) OnPacketRTCP

func (c *Client) OnPacketRTCP(medi *description.Media, cb OnPacketRTCPFunc)

OnPacketRTCP sets the callback that is called when a RTCP packet is read.

func (*Client) OnPacketRTCPAny

func (c *Client) OnPacketRTCPAny(cb OnPacketRTCPAnyFunc)

OnPacketRTCPAny sets the callback that is called when a RTCP packet is read from any setupped media.

func (*Client) OnPacketRTP

func (c *Client) OnPacketRTP(medi *description.Media, forma format.Format, cb OnPacketRTPFunc)

OnPacketRTP sets the callback that is called when a RTP packet is read.

func (*Client) OnPacketRTPAny

func (c *Client) OnPacketRTPAny(cb OnPacketRTPAnyFunc)

OnPacketRTPAny sets the callback that is called when a RTP packet is read from any setupped media.

func (*Client) Options

func (c *Client) Options(u *base.URL) (*base.Response, error)

Options sends an OPTIONS request.

func (*Client) PacketNTP

func (c *Client) PacketNTP(medi *description.Media, pkt *rtp.Packet) (time.Time, bool)

PacketNTP returns the NTP timestamp of an incoming RTP packet. The NTP timestamp is computed from RTCP sender reports.

func (*Client) PacketPTS

func (c *Client) PacketPTS(medi *description.Media, pkt *rtp.Packet) (time.Duration, bool)

PacketPTS returns the PTS of an incoming RTP packet. It is computed by decoding the packet timestamp and sychronizing it with other tracks.

func (*Client) Pause

func (c *Client) Pause() (*base.Response, error)

Pause sends a PAUSE request. This can be called only after Play() or Record().

func (*Client) Play

func (c *Client) Play(ra *headers.Range) (*base.Response, error)

Play sends a PLAY request. This can be called only after Setup().

func (*Client) Record

func (c *Client) Record() (*base.Response, error)

Record sends a RECORD request. This can be called only after Announce() and Setup().

func (*Client) Seek

func (c *Client) Seek(ra *headers.Range) (*base.Response, error)

Seek asks the server to re-start the stream from a specific timestamp.

func (*Client) Setup

func (c *Client) Setup(
	baseURL *base.URL,
	media *description.Media,
	rtpPort int,
	rtcpPort int,
) (*base.Response, error)

Setup sends a SETUP request. rtpPort and rtcpPort are used only if transport is UDP. if rtpPort and rtcpPort are zero, they are chosen automatically.

func (*Client) SetupAll

func (c *Client) SetupAll(baseURL *base.URL, medias []*description.Media) error

SetupAll setups all the given medias.

func (*Client) Start

func (c *Client) Start(scheme string, host string) error

Start initializes the connection to a server.

func (*Client) StartRecording

func (c *Client) StartRecording(address string, desc *description.Session) error

StartRecording connects to the address and starts publishing given media.

func (*Client) Wait

func (c *Client) Wait() error

Wait waits until all client resources are closed. This can happen when a fatal error occurs or when Close() is called.

func (*Client) WritePacketRTCP

func (c *Client) WritePacketRTCP(medi *description.Media, pkt rtcp.Packet) error

WritePacketRTCP writes a RTCP packet to the server.

func (*Client) WritePacketRTP

func (c *Client) WritePacketRTP(medi *description.Media, pkt *rtp.Packet) error

WritePacketRTP writes a RTP packet to the server.

func (*Client) WritePacketRTPWithNTP

func (c *Client) WritePacketRTPWithNTP(medi *description.Media, pkt *rtp.Packet, ntp time.Time) error

WritePacketRTPWithNTP writes a RTP packet to the server. ntp is the absolute time of the packet, and is sent with periodic RTCP sender reports.

type ClientOnDecodeErrorFunc

type ClientOnDecodeErrorFunc func(err error)

ClientOnDecodeErrorFunc is the prototype of Client.OnDecodeError.

type ClientOnPacketLostFunc

type ClientOnPacketLostFunc func(err error)

ClientOnPacketLostFunc is the prototype of Client.OnPacketLost.

type ClientOnRequestFunc

type ClientOnRequestFunc func(*base.Request)

ClientOnRequestFunc is the prototype of Client.OnRequest.

type ClientOnResponseFunc

type ClientOnResponseFunc func(*base.Response)

ClientOnResponseFunc is the prototype of Client.OnResponse.

type ClientOnTransportSwitchFunc

type ClientOnTransportSwitchFunc func(err error)

ClientOnTransportSwitchFunc is the prototype of Client.OnTransportSwitch.

type OnPacketRTCPAnyFunc

type OnPacketRTCPAnyFunc func(*description.Media, rtcp.Packet)

OnPacketRTCPAnyFunc is the prototype of the callback passed to OnPacketRTCPAny().

type OnPacketRTCPFunc

type OnPacketRTCPFunc func(rtcp.Packet)

OnPacketRTCPFunc is the prototype of the callback passed to OnPacketRTCP().

type OnPacketRTPAnyFunc

type OnPacketRTPAnyFunc func(*description.Media, format.Format, *rtp.Packet)

OnPacketRTPAnyFunc is the prototype of the callback passed to OnPacketRTP(Any).

type OnPacketRTPFunc

type OnPacketRTPFunc func(*rtp.Packet)

OnPacketRTPFunc is the prototype of the callback passed to OnPacketRTP().

type Server

type Server struct {
	//
	// RTSP parameters (all optional except RTSPAddress)
	//
	// the RTSP address of the server, to accept connections and send and receive
	// packets with the TCP transport.
	RTSPAddress string
	// a port to send and receive RTP packets with the UDP transport.
	// If UDPRTPAddress and UDPRTCPAddress are filled, the server can support the UDP transport.
	UDPRTPAddress string
	// a port to send and receive RTCP packets with the UDP transport.
	// If UDPRTPAddress and UDPRTCPAddress are filled, the server can support the UDP transport.
	UDPRTCPAddress string
	// a range of multicast IPs to use with the UDP-multicast transport.
	// If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server
	// can support the UDP-multicast transport.
	MulticastIPRange string
	// a port to send RTP packets with the UDP-multicast transport.
	// If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server
	// can support the UDP-multicast transport.
	MulticastRTPPort int
	// a port to send RTCP packets with the UDP-multicast transport.
	// If MulticastIPRange, MulticastRTPPort, MulticastRTCPPort are filled, the server
	// can support the UDP-multicast transport.
	MulticastRTCPPort int
	// 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
	// Size of the queue of outgoing packets.
	// It defaults to 256.
	WriteQueueSize int
	// maximum size of outgoing RTP / RTCP packets.
	// This must be less than the UDP MTU (1472 bytes).
	// It defaults to 1472.
	MaxPacketSize int
	// disable automatic RTCP sender reports.
	DisableRTCPSenderReports bool

	//
	// handler (optional)
	//
	// an handler to handle server events.
	// It may implement one or more of the ServerHandler* interfaces.
	Handler ServerHandler

	//
	// system functions (all optional)
	//
	// 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) Close

func (s *Server) Close()

Close closes all the server resources and waits for them to close.

func (*Server) Start

func (s *Server) Start() error

Start starts the server.

func (*Server) StartAndWait

func (s *Server) StartAndWait() error

StartAndWait starts the server and waits until a fatal error.

func (*Server) Wait

func (s *Server) Wait() error

Wait waits until all server resources are closed. This can happen when a fatal error occurs or when Close() is called.

type ServerConn

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

ServerConn is a server-side RTSP connection.

func (*ServerConn) BytesReceived

func (sc *ServerConn) BytesReceived() uint64

BytesReceived returns the number of read bytes.

func (*ServerConn) BytesSent

func (sc *ServerConn) BytesSent() uint64

BytesSent returns the number of written bytes.

func (*ServerConn) Close

func (sc *ServerConn) Close()

Close closes the ServerConn.

func (*ServerConn) NetConn

func (sc *ServerConn) NetConn() net.Conn

NetConn returns the underlying net.Conn.

func (*ServerConn) SetUserData

func (sc *ServerConn) SetUserData(v interface{})

SetUserData sets some user data associated with the connection.

func (*ServerConn) UserData

func (sc *ServerConn) UserData() interface{}

UserData returns some user data associated with the connection.

type ServerHandler

type ServerHandler interface{}

ServerHandler is the interface implemented by all the server handlers.

type ServerHandlerOnAnnounce

type ServerHandlerOnAnnounce interface {
	// called when receiving an ANNOUNCE request.
	OnAnnounce(*ServerHandlerOnAnnounceCtx) (*base.Response, error)
}

ServerHandlerOnAnnounce can be implemented by a ServerHandler.

type ServerHandlerOnAnnounceCtx

type ServerHandlerOnAnnounceCtx struct {
	Session     *ServerSession
	Conn        *ServerConn
	Request     *base.Request
	Path        string
	Query       string
	Description *description.Session
}

ServerHandlerOnAnnounceCtx is the context of OnAnnounce.

type ServerHandlerOnConnClose

type ServerHandlerOnConnClose interface {
	// called when a connection is closed.
	OnConnClose(*ServerHandlerOnConnCloseCtx)
}

ServerHandlerOnConnClose can be implemented by a ServerHandler.

type ServerHandlerOnConnCloseCtx

type ServerHandlerOnConnCloseCtx struct {
	Conn  *ServerConn
	Error error
}

ServerHandlerOnConnCloseCtx is the context of OnConnClose.

type ServerHandlerOnConnOpen

type ServerHandlerOnConnOpen interface {
	// called when a connection is opened.
	OnConnOpen(*ServerHandlerOnConnOpenCtx)
}

ServerHandlerOnConnOpen can be implemented by a ServerHandler.

type ServerHandlerOnConnOpenCtx

type ServerHandlerOnConnOpenCtx struct {
	Conn *ServerConn
}

ServerHandlerOnConnOpenCtx is the context of OnConnOpen.

type ServerHandlerOnDecodeError

type ServerHandlerOnDecodeError interface {
	// called when a non-fatal decode error occurs.
	OnDecodeError(*ServerHandlerOnDecodeErrorCtx)
}

ServerHandlerOnDecodeError can be implemented by a ServerHandler.

type ServerHandlerOnDecodeErrorCtx

type ServerHandlerOnDecodeErrorCtx struct {
	Session *ServerSession
	Error   error
}

ServerHandlerOnDecodeErrorCtx is the context of OnDecodeError.

type ServerHandlerOnDescribe

type ServerHandlerOnDescribe interface {
	// called when receiving a DESCRIBE request.
	OnDescribe(*ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error)
}

ServerHandlerOnDescribe can be implemented by a ServerHandler.

type ServerHandlerOnDescribeCtx

type ServerHandlerOnDescribeCtx struct {
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnDescribeCtx is the context of OnDescribe.

type ServerHandlerOnGetParameter

type ServerHandlerOnGetParameter interface {
	// called when receiving a GET_PARAMETER request.
	OnGetParameter(*ServerHandlerOnGetParameterCtx) (*base.Response, error)
}

ServerHandlerOnGetParameter can be implemented by a ServerHandler.

type ServerHandlerOnGetParameterCtx

type ServerHandlerOnGetParameterCtx struct {
	Session *ServerSession
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnGetParameterCtx is the context of OnGetParameter.

type ServerHandlerOnPacketLost

type ServerHandlerOnPacketLost interface {
	// called when the server detects lost packets.
	OnPacketLost(*ServerHandlerOnPacketLostCtx)
}

ServerHandlerOnPacketLost can be implemented by a ServerHandler.

type ServerHandlerOnPacketLostCtx

type ServerHandlerOnPacketLostCtx struct {
	Session *ServerSession
	Error   error
}

ServerHandlerOnPacketLostCtx is the context of OnPacketLost.

type ServerHandlerOnPause

type ServerHandlerOnPause interface {
	// called when receiving a PAUSE request.
	OnPause(*ServerHandlerOnPauseCtx) (*base.Response, error)
}

ServerHandlerOnPause can be implemented by a ServerHandler.

type ServerHandlerOnPauseCtx

type ServerHandlerOnPauseCtx struct {
	Session *ServerSession
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnPauseCtx is the context of OnPause.

type ServerHandlerOnPlay

type ServerHandlerOnPlay interface {
	// called when receiving a PLAY request.
	OnPlay(*ServerHandlerOnPlayCtx) (*base.Response, error)
}

ServerHandlerOnPlay can be implemented by a ServerHandler.

type ServerHandlerOnPlayCtx

type ServerHandlerOnPlayCtx struct {
	Session *ServerSession
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnPlayCtx is the context of OnPlay.

type ServerHandlerOnRecord

type ServerHandlerOnRecord interface {
	// called when receiving a RECORD request.
	OnRecord(*ServerHandlerOnRecordCtx) (*base.Response, error)
}

ServerHandlerOnRecord can be implemented by a ServerHandler.

type ServerHandlerOnRecordCtx

type ServerHandlerOnRecordCtx struct {
	Session *ServerSession
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnRecordCtx is the context of OnRecord.

type ServerHandlerOnRequest

type ServerHandlerOnRequest interface {
	// called when receiving a request from a connection.
	OnRequest(*ServerConn, *base.Request)
}

ServerHandlerOnRequest can be implemented by a ServerHandler.

type ServerHandlerOnResponse

type ServerHandlerOnResponse interface {
	// called when sending a response to a connection.
	OnResponse(*ServerConn, *base.Response)
}

ServerHandlerOnResponse can be implemented by a ServerHandler.

type ServerHandlerOnSessionClose

type ServerHandlerOnSessionClose interface {
	// called when a session is closed.
	OnSessionClose(*ServerHandlerOnSessionCloseCtx)
}

ServerHandlerOnSessionClose can be implemented by a ServerHandler.

type ServerHandlerOnSessionCloseCtx

type ServerHandlerOnSessionCloseCtx struct {
	Session *ServerSession
	Error   error
}

ServerHandlerOnSessionCloseCtx is the context of ServerHandlerOnSessionClose.

type ServerHandlerOnSessionOpen

type ServerHandlerOnSessionOpen interface {
	// called when a session is opened.
	OnSessionOpen(*ServerHandlerOnSessionOpenCtx)
}

ServerHandlerOnSessionOpen can be implemented by a ServerHandler.

type ServerHandlerOnSessionOpenCtx

type ServerHandlerOnSessionOpenCtx struct {
	Session *ServerSession
	Conn    *ServerConn
}

ServerHandlerOnSessionOpenCtx is the context OnSessionOpen.

type ServerHandlerOnSetParameter

type ServerHandlerOnSetParameter interface {
	// called when receiving a SET_PARAMETER request.
	OnSetParameter(*ServerHandlerOnSetParameterCtx) (*base.Response, error)
}

ServerHandlerOnSetParameter can be implemented by a ServerHandler.

type ServerHandlerOnSetParameterCtx

type ServerHandlerOnSetParameterCtx struct {
	Session *ServerSession
	Conn    *ServerConn
	Request *base.Request
	Path    string
	Query   string
}

ServerHandlerOnSetParameterCtx is the context of OnSetParameter.

type ServerHandlerOnSetup

type ServerHandlerOnSetup interface {
	// called when receiving a SETUP request.
	// 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 {
	Session   *ServerSession
	Conn      *ServerConn
	Request   *base.Request
	Path      string
	Query     string
	Transport Transport
}

ServerHandlerOnSetupCtx is the context of OnSetup.

type ServerHandlerOnStreamWriteError

type ServerHandlerOnStreamWriteError interface {
	// called when a ServerStream is unable to write packets to a session.
	OnStreamWriteError(*ServerHandlerOnStreamWriteErrorCtx)
}

ServerHandlerOnStreamWriteError can be implemented by a ServerHandler.

type ServerHandlerOnStreamWriteErrorCtx

type ServerHandlerOnStreamWriteErrorCtx struct {
	Session *ServerSession
	Error   error
}

ServerHandlerOnStreamWriteErrorCtx is the context of OnStreamWriteError.

type ServerSession

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

ServerSession is a server-side RTSP session.

func (*ServerSession) AnnouncedDescription

func (ss *ServerSession) AnnouncedDescription() *description.Session

AnnouncedDescription returns the announced stream description.

func (*ServerSession) BytesReceived

func (ss *ServerSession) BytesReceived() uint64

BytesReceived returns the number of read bytes.

func (*ServerSession) BytesSent

func (ss *ServerSession) BytesSent() uint64

BytesSent returns the number of written bytes.

func (*ServerSession) Close

func (ss *ServerSession) Close()

Close closes the ServerSession.

func (*ServerSession) ID

func (ss *ServerSession) ID() string

func (*ServerSession) OnPacketRTCP

func (ss *ServerSession) OnPacketRTCP(medi *description.Media, cb OnPacketRTCPFunc)

OnPacketRTCP sets the callback that is called when a RTCP packet is read.

func (*ServerSession) OnPacketRTCPAny

func (ss *ServerSession) OnPacketRTCPAny(cb OnPacketRTCPAnyFunc)

OnPacketRTCPAny sets the callback that is called when a RTCP packet is read from any setupped media.

func (*ServerSession) OnPacketRTP

func (ss *ServerSession) OnPacketRTP(medi *description.Media, forma format.Format, cb OnPacketRTPFunc)

OnPacketRTP sets the callback that is called when a RTP packet is read.

func (*ServerSession) OnPacketRTPAny

func (ss *ServerSession) OnPacketRTPAny(cb OnPacketRTPAnyFunc)

OnPacketRTPAny sets the callback that is called when a RTP packet is read from any setupped media.

func (*ServerSession) PacketNTP

func (ss *ServerSession) PacketNTP(medi *description.Media, pkt *rtp.Packet) (time.Time, bool)

PacketNTP returns the NTP timestamp of an incoming RTP packet. The NTP timestamp is computed from RTCP sender reports.

func (*ServerSession) PacketPTS

func (ss *ServerSession) PacketPTS(medi *description.Media, pkt *rtp.Packet) (time.Duration, bool)

PacketPTS returns the PTS of an incoming RTP packet. It is computed by decoding the packet timestamp and sychronizing it with other tracks.

func (*ServerSession) SetUserData

func (ss *ServerSession) SetUserData(v interface{})

SetUserData sets some user data associated with the session.

func (*ServerSession) SetuppedMedias

func (ss *ServerSession) SetuppedMedias() []*description.Media

SetuppedMedias returns the setupped medias.

func (*ServerSession) SetuppedPath

func (ss *ServerSession) SetuppedPath() string

SetuppedPath returns the path sent during SETUP or ANNOUNCE.

func (*ServerSession) SetuppedQuery

func (ss *ServerSession) SetuppedQuery() string

SetuppedQuery returns the query sent during SETUP or ANNOUNCE.

func (*ServerSession) SetuppedStream

func (ss *ServerSession) SetuppedStream() *ServerStream

SetuppedStream returns the stream associated with the session.

func (*ServerSession) SetuppedTransport

func (ss *ServerSession) SetuppedTransport() *Transport

SetuppedTransport returns the transport negotiated during SETUP.

func (*ServerSession) State

func (ss *ServerSession) State() ServerSessionState

State returns the state of the session.

func (*ServerSession) UserData

func (ss *ServerSession) UserData() interface{}

UserData returns some user data associated with the session.

func (*ServerSession) WritePacketRTCP

func (ss *ServerSession) WritePacketRTCP(medi *description.Media, pkt rtcp.Packet) error

WritePacketRTCP writes a RTCP packet to the session.

func (*ServerSession) WritePacketRTP

func (ss *ServerSession) WritePacketRTP(medi *description.Media, pkt *rtp.Packet) error

WritePacketRTP writes a RTP packet to the session.

type ServerSessionState

type ServerSessionState int

ServerSessionState is a state of a ServerSession.

const (
	ServerSessionStateInitial ServerSessionState = iota
	ServerSessionStatePrePlay
	ServerSessionStatePlay
	ServerSessionStatePreRecord
	ServerSessionStateRecord
)

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 data stream. This is in charge of - distributing the stream to each reader - allocating multicast listeners - gathering infos about the stream in order to generate SSRC and RTP-Info

func NewServerStream

func NewServerStream(s *Server, desc *description.Session) *ServerStream

NewServerStream allocates a ServerStream.

func (*ServerStream) BytesSent

func (st *ServerStream) BytesSent() uint64

BytesSent returns the number of written bytes.

func (*ServerStream) Close

func (st *ServerStream) Close()

Close closes a ServerStream.

func (*ServerStream) Description

func (st *ServerStream) Description() *description.Session

Description returns the description of the stream.

func (*ServerStream) WritePacketRTCP

func (st *ServerStream) WritePacketRTCP(medi *description.Media, pkt rtcp.Packet) error

WritePacketRTCP writes a RTCP packet to all the readers of the stream.

func (*ServerStream) WritePacketRTP

func (st *ServerStream) WritePacketRTP(medi *description.Media, pkt *rtp.Packet) error

WritePacketRTP writes a RTP packet to all the readers of the stream.

func (*ServerStream) WritePacketRTPWithNTP

func (st *ServerStream) WritePacketRTPWithNTP(medi *description.Media, pkt *rtp.Packet, ntp time.Time) error

WritePacketRTPWithNTP writes a RTP packet to all the readers of the stream. ntp is the absolute time of the packet, and is sent with periodic RTCP sender reports.

type Transport

type Transport int

Transport is a RTSP transport protocol.

const (
	TransportUDP Transport = iota
	TransportUDPMulticast
	TransportTCP
)

transport protocols.

func (Transport) String

func (t Transport) String() string

String implements fmt.Stringer.

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 primitives of the RTSP protocol.
Package base contains the primitives of the RTSP protocol.
bytecounter
Package bytecounter contains a io.ReadWriter wrapper that allows to count read and written bytes.
Package bytecounter contains a io.ReadWriter wrapper that allows to count read and written bytes.
conn
Package conn contains a RTSP connection implementation.
Package conn contains a RTSP connection implementation.
description
Package description contains objects to describe streams.
Package description contains objects to describe streams.
format
Package format contains RTP format definitions, decoders and encoders.
Package format contains RTP format definitions, decoders and encoders.
format/rtpac3
Package rtpac3 contains a RTP/AC-3 decoder and encoder.
Package rtpac3 contains a RTP/AC-3 decoder and encoder.
format/rtpav1
Package rtpav1 contains a RTP/AV1 decoder and encoder.
Package rtpav1 contains a RTP/AV1 decoder and encoder.
format/rtph264
Package rtph264 contains a RTP/H264 decoder and encoder.
Package rtph264 contains a RTP/H264 decoder and encoder.
format/rtph265
Package rtph265 contains a RTP/H265 decoder and encoder.
Package rtph265 contains a RTP/H265 decoder and encoder.
format/rtplpcm
Package rtplpcm contains a RTP/LPCM decoder and encoder.
Package rtplpcm contains a RTP/LPCM decoder and encoder.
format/rtpmjpeg
Package rtpmjpeg contains a RTP/M-JPEG decoder and encoder.
Package rtpmjpeg contains a RTP/M-JPEG decoder and encoder.
format/rtpmpeg1audio
Package rtpmpeg1audio contains a RTP/MPEG-1/2 Audio decoder and encoder.
Package rtpmpeg1audio contains a RTP/MPEG-1/2 Audio decoder and encoder.
format/rtpmpeg1video
Package rtpmpeg1video contains a RTP/MPEG-1/2 Video decoder and encoder.
Package rtpmpeg1video contains a RTP/MPEG-1/2 Video decoder and encoder.
format/rtpmpeg4audio
Package rtpmpeg4audio contains a RTP/MPEG-4 Audio decoder and encoder.
Package rtpmpeg4audio contains a RTP/MPEG-4 Audio decoder and encoder.
format/rtpmpeg4video
Package rtpmpeg4video contains a RTP/MPEG-4 Video decoder and encoder.
Package rtpmpeg4video contains a RTP/MPEG-4 Video decoder and encoder.
format/rtpsimpleaudio
Package rtpsimpleaudio contains a RTP decoder and encoder for audio codecs that fit in a single packet.
Package rtpsimpleaudio contains a RTP decoder and encoder for audio codecs that fit in a single packet.
format/rtpvp8
Package rtpvp8 contains a RTP/VP8 decoder and encoder.
Package rtpvp8 contains a RTP/VP8 decoder and encoder.
format/rtpvp9
Package rtpvp9 contains a RTP/VP9 decoder and encoder.
Package rtpvp9 contains a RTP/VP9 decoder and encoder.
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.
multicast
Package multicast contains multicast connections.
Package multicast contains multicast connections.
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.
rtplossdetector
Package rtplossdetector implements an algorithm that detects lost packets.
Package rtplossdetector implements an algorithm that detects lost packets.
rtpreorderer
Package rtpreorderer implements a filter to reorder incoming RTP packets.
Package rtpreorderer implements a filter to reorder incoming RTP packets.
rtptime
Package rtptime contains a time decoder and encoder.
Package rtptime contains a time 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.
url
Package url is deprecated.
Package url is deprecated.

Jump to

Keyboard shortcuts

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