Documentation ¶
Index ¶
- Constants
- Variables
- func DecodeSDP(b []byte) (m *sdp.Message, err error)
- func EncodeRTPInfo(infos []*RTPInfo) string
- func EncodeSDP(m *sdp.Message) []byte
- func GetSDPAttribute(media *sdp.Media, key string) (string, error)
- func ParseRTSPVersion(vers string) (major, minor int, ok bool)
- func SetSDPAttribute(media *sdp.Media, key, value string) error
- func StatusText(statusCode int) string
- type Authorization
- type Client
- type ClientOptions
- type InterleavedFrame
- type MediaChannel
- type PlayOptions
- type PlaySession
- type RTCPPacket
- type RTPInfo
- type RTPPacket
- func (p RTPPacket) CSRCCount() int
- func (p RTPPacket) Extension() bool
- func (p RTPPacket) Len() int
- func (p RTPPacket) Marker() bool
- func (p RTPPacket) Padding() bool
- func (p RTPPacket) Payload() []byte
- func (p RTPPacket) PayloadType() int
- func (p RTPPacket) SSRC() uint32
- func (p RTPPacket) SequenceNumber() uint16
- func (p RTPPacket) SetSequenceNumber(seq uint16)
- func (p RTPPacket) SetTimestamp(timestamp uint32)
- func (p RTPPacket) Timestamp() uint32
- func (p RTPPacket) Version() int
- type RTPTransportType
- type Request
- type Response
Constants ¶
const ( MethodOptions = "OPTIONS" MethodAnnounce = "ANNOUNCE" MethodDescribe = "DESCRIBE" MethodSetup = "SETUP" MethodPlay = "PLAY" MethodPause = "PAUSE" MethodGetParameter = "GET_PARAMETER" MethodSetParameter = "SET_PARAMETER" MethodTeardown = "TEARDOWN" MethodRecord = "RECORD" )
RTSP request method
const ( StatusContinue = 100 // RFC 7231, 6.2.1 StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2 StatusProcessing = 102 // RFC 2518, 10.1 StatusOK = 200 // RFC 7231, 6.3.1 StatusCreated = 201 // RFC 7231, 6.3.2 StatusAccepted = 202 // RFC 7231, 6.3.3 StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4 StatusNoContent = 204 // RFC 7231, 6.3.5 StatusResetContent = 205 // RFC 7231, 6.3.6 StatusPartialContent = 206 // RFC 7233, 4.1 StatusMultiStatus = 207 // RFC 4918, 11.1 StatusAlreadyReported = 208 // RFC 5842, 7.1 StatusIMUsed = 226 // RFC 3229, 10.4.1 StatusMultipleChoices = 300 // RFC 7231, 6.4.1 StatusMovedPermanently = 301 // RFC 7231, 6.4.2 StatusFound = 302 // RFC 7231, 6.4.3 StatusSeeOther = 303 // RFC 7231, 6.4.4 StatusNotModified = 304 // RFC 7232, 4.1 StatusUseProxy = 305 // RFC 7231, 6.4.5 StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7 StatusPermanentRedirect = 308 // RFC 7538, 3 StatusBadRequest = 400 // RFC 7231, 6.5.1 StatusPaymentRequired = 402 // RFC 7231, 6.5.2 StatusForbidden = 403 // RFC 7231, 6.5.3 StatusNotFound = 404 // RFC 7231, 6.5.4 StatusMethodNotAllowed = 405 // RFC 7231, 6.5.5 StatusNotAcceptable = 406 // RFC 7231, 6.5.6 StatusProxyAuthRequired = 407 // RFC 7235, 3.2 StatusRequestTimeout = 408 // RFC 7231, 6.5.7 StatusConflict = 409 // RFC 7231, 6.5.8 StatusGone = 410 // RFC 7231, 6.5.9 StatusLengthRequired = 411 // RFC 7231, 6.5.10 StatusPreconditionFailed = 412 // RFC 7232, 4.2 StatusRequestEntityTooLarge = 413 // RFC 7231, 6.5.11 StatusRequestURITooLong = 414 // RFC 7231, 6.5.12 StatusUnsupportedMediaType = 415 // RFC 7231, 6.5.13 StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4 StatusExpectationFailed = 417 // RFC 7231, 6.5.14 StatusTeapot = 418 // RFC 7168, 2.3.3 StatusMisdirectedRequest = 421 // RFC 7540, 9.1.2 StatusUnprocessableEntity = 422 // RFC 4918, 11.2 StatusLocked = 423 // RFC 4918, 11.3 StatusFailedDependency = 424 // RFC 4918, 11.4 StatusTooEarly = 425 // RFC 8470, 5.2. StatusUpgradeRequired = 426 // RFC 7231, 6.5.15 StatusPreconditionRequired = 428 // RFC 6585, 3 StatusTooManyRequests = 429 // RFC 6585, 4 StatusRequestHeaderFieldsTooLarge = 431 // RFC 6585, 5 StatusMethodNotValidInThisState = 455 // RFC 2326, 11.3.6 StatusInternalServerError = 500 // RFC 7231, 6.6.1 StatusNotImplemented = 501 // RFC 7231, 6.6.2 StatusBadGateway = 502 // RFC 7231, 6.6.3 StatusGatewayTimeout = 504 // RFC 7231, 6.6.5 StatusHTTPVersionNotSupported = 505 // RFC 7231, 6.6.6 StatusVariantAlsoNegotiates = 506 // RFC 2295, 8.1 StatusInsufficientStorage = 507 // RFC 4918, 11.5 StatusLoopDetected = 508 // RFC 5842, 7.2 StatusNotExtended = 510 // RFC 2774, 7 StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6 )
RTSP status codes as registered with IANA. See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml HTTP status codes as registered with IANA. See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
const InterleavedFrameHeaderLength = 4
InterleavedFrameHeaderLength 1byte 0x24, 1byte channel 2byte length
const RTPFixedHeaderLength = 12
RTPFixedHeaderLength of each RTP Packet
Variables ¶
var ( ErrorInterleavedFrameHeaderTooShort = errors.New("interleave frame too short") ErrorInterleavedMagicNumberWrong = errors.New("interleaved magic number wrong") ErrorClientAlreadyStopped = errors.New("RTSP client already stopped") ErrorTimeout = errors.New("Timeout") ErrorUserinfoNeed = errors.New("Need user info to login") ErrorRTPTooShort = errors.New("RTP packet is too short") ErrorDropFrame = errors.New("drop frame due to full queue") ErrorNotImplement = errors.New("not implement") )
const errors
Functions ¶
func GetSDPAttribute ¶
GetSDPAttribute from SDP
func ParseRTSPVersion ¶
ParseRTSPVersion parses a RTSP version string. "RTSP/1.0" returns (1, 0, true).
func SetSDPAttribute ¶
SetSDPAttribute from SDP
Types ¶
type Authorization ¶
Authorization machine of RFC2617
func NewAuthenticate ¶
func NewAuthenticate(wwwAuthenticate, username, password string) (Authorization, error)
NewAuthenticate returns
type Client ¶
type Client struct { context.Context Options *ClientOptions URL *url.URL Userinfo *url.Userinfo // State CSeq uint64 // contains filtered or unexported fields }
Client of RTSP
func (*Client) ReadInterleavedFrame ¶
func (client *Client) ReadInterleavedFrame() <-chan InterleavedFrame
ReadInterleavedFrame from RTSP server
func (*Client) SendRequest ¶
SendRequest to RTSP server
type ClientOptions ¶
type ClientOptions struct { ConnectTimeout time.Duration ReadBufferSize int WriteQueueSize int ReadInterleavedFrameSize int }
ClientOptions of RTSP
type InterleavedFrame ¶
type InterleavedFrame [][]byte
InterleavedFrame over TCP
func ParseInterleavedFrame ¶
func ParseInterleavedFrame(b [][]byte) (InterleavedFrame, error)
ParseInterleavedFrame from []byte
func ReadInterleavedFrame ¶
func ReadInterleavedFrame(reader *bufio.Reader) (frame InterleavedFrame, err error)
ReadInterleavedFrame from reader
func (InterleavedFrame) Channel ¶
func (frame InterleavedFrame) Channel() uint8
Channel of interleave
type MediaChannel ¶
type MediaChannel struct { Type RTPTransportType Control string MediaID int ControlID int MediaQueue chan RTPPacket ControlQueue chan RTCPPacket SSRC []byte }
MediaChannel of RTSP
func (*MediaChannel) HandleRTCP ¶
func (mc *MediaChannel) HandleRTCP(p []byte) error
HandleRTCP to channel
func (*MediaChannel) HandleRTP ¶
func (mc *MediaChannel) HandleRTP(p []byte) error
HandleRTP to channel
func (*MediaChannel) String ¶
func (mc *MediaChannel) String() string
func (*MediaChannel) TCPString ¶
func (mc *MediaChannel) TCPString() string
TCPString for header of RTSP
type PlayOptions ¶
type PlayOptions struct { Timeout time.Duration UserAgent string MediaQueueSize int ControlQueueSize int Keepalive time.Duration }
PlayOptions of PlaySession
type PlaySession ¶
type PlaySession struct { *Client *PlayOptions SDP *sdp.Message Channels []*MediaChannel RTPInfos []*RTPInfo // Parameters ContentBase string Token string Keepalive time.Duration // contains filtered or unexported fields }
PlaySession of RTSP
func Play ¶
func Play(client *Client, options *PlayOptions) (session *PlaySession, err error)
Play rtsp medias
func (*PlaySession) NewRequest ¶
func (session *PlaySession) NewRequest(method, control string) (*Request, error)
NewRequest of this session
func (*PlaySession) PrefixURL ¶
func (session *PlaySession) PrefixURL() string
PrefixURL of RTSP, Content-Base or Raw URL
type RTPPacket ¶
type RTPPacket []byte
RTPPacket raw data
func (RTPPacket) SequenceNumber ¶
SequenceNumber of Packet
func (RTPPacket) SetSequenceNumber ¶
func (RTPPacket) SetTimestamp ¶
type RTPTransportType ¶
type RTPTransportType int
RTPTransportType udp or tcp
const ( RTPTransportInvalid RTPTransportType = iota RTPOverTCP RTPOverUDP )
RTP tansport type
type Request ¶
type Request struct { Method string URL *url.URL // non-nil in server RawURL string // Manufactor like DaHua ONVIF RTSP URL is invalid Control string // uri of Authorization is without control ProtoMajor int ProtoMinor int CSeq uint64 // for other arch system, use 32 bit integer Header header.Header Body []byte }
Request of RTSP
func ReadRequest ¶
ReadRequest from reader