rtsp

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Aug 22, 2019 License: MIT Imports: 20 Imported by: 0

README

RTSP

介绍

RTSP in Go

Documentation

Index

Constants

View Source
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

View Source
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
	StatusUnauthorized                 = 401 // RFC 7235, 3.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
	StatusUnavailableForLegalReasons   = 451 // RFC 7725, 3
	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
	StatusServiceUnavailable            = 503 // RFC 7231, 6.6.4
	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

View Source
const InterleavedFrameHeaderLength = 4

InterleavedFrameHeaderLength 1byte 0x24, 1byte channel 2byte length

View Source
const RTPFixedHeaderLength = 12

RTPFixedHeaderLength of each RTP Packet

Variables

View Source
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 DecodeSDP

func DecodeSDP(b []byte) (m *sdp.Message, err error)

DecodeSDP from bytes of string

func EncodeRTPInfo

func EncodeRTPInfo(infos []*RTPInfo) string

EncodeRTPInfo of RTSP header

func EncodeSDP

func EncodeSDP(m *sdp.Message) []byte

EncodeSDP from SDP object

func GetSDPAttribute

func GetSDPAttribute(media *sdp.Media, key string) (string, error)

GetSDPAttribute from SDP

func ParseRTSPVersion

func ParseRTSPVersion(vers string) (major, minor int, ok bool)

ParseRTSPVersion parses a RTSP version string. "RTSP/1.0" returns (1, 0, true).

func SetSDPAttribute

func SetSDPAttribute(media *sdp.Media, key, value string) error

SetSDPAttribute from SDP

func StatusText

func StatusText(statusCode int) string

StatusText of status code

Types

type Authorization

type Authorization interface {
	Inject(*Request) error
}

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 Dial

func Dial(ctx context.Context, rawurl string, options *ClientOptions) (*Client, error)

Dial to RTSP server

func (*Client) ReadInterleavedFrame

func (client *Client) ReadInterleavedFrame() <-chan InterleavedFrame

ReadInterleavedFrame from RTSP server

func (*Client) SendRequest

func (client *Client) SendRequest(request *Request, timeout time.Duration) (*Response, error)

SendRequest to RTSP server

func (*Client) Stop

func (client *Client) Stop() error

Stop then client

type ClientOptions

type ClientOptions struct {
	ConnectTimeout           time.Duration
	ReadBufferSize           int
	WriteQueueSize           int
	ReadInterleavedFrameSize int
}

ClientOptions of RTSP

func DefaultClientOptions

func DefaultClientOptions() *ClientOptions

DefaultClientOptions 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

func (InterleavedFrame) Data

func (frame InterleavedFrame) Data() []byte

Data of the frame

func (InterleavedFrame) Length

func (frame InterleavedFrame) Length() int

Length of RTP Packet

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

func DefaultPlayOptions

func DefaultPlayOptions() *PlayOptions

DefaultPlayOptions of RTSP

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 RTCPPacket

type RTCPPacket []byte

RTCPPacket raw data

func ParseRTCP

func ParseRTCP(b []byte) (RTCPPacket, error)

ParseRTCP from []byte

type RTPInfo

type RTPInfo struct {
	Control string
	Packet  RTPPacket
}

RTPInfo for RTSP play

func DecodeRTPInfo

func DecodeRTPInfo(raw string) (infos []*RTPInfo, _ error)

DecodeRTPInfo of RTSP header

func (*RTPInfo) String

func (info *RTPInfo) String() string

type RTPPacket

type RTPPacket []byte

RTPPacket raw data

func ParseRTP

func ParseRTP(b []byte) (RTPPacket, error)

ParseRTP from []byte

func (RTPPacket) CSRCCount

func (p RTPPacket) CSRCCount() int

CSRCCount of packet

func (RTPPacket) Extension

func (p RTPPacket) Extension() bool

Extension RTP or not

func (RTPPacket) Len

func (p RTPPacket) Len() int

Len whole RTP

func (RTPPacket) Marker

func (p RTPPacket) Marker() bool

Marker of last fragment of large packet

func (RTPPacket) Padding

func (p RTPPacket) Padding() bool

Padding at end of packet

func (RTPPacket) Payload

func (p RTPPacket) Payload() []byte

Payload of Packet

func (RTPPacket) PayloadType

func (p RTPPacket) PayloadType() int

PayloadType of Packet

func (RTPPacket) SSRC

func (p RTPPacket) SSRC() uint32

SSRC of Packet

func (RTPPacket) SequenceNumber

func (p RTPPacket) SequenceNumber() uint16

SequenceNumber of Packet

func (RTPPacket) SetSequenceNumber

func (p RTPPacket) SetSequenceNumber(seq uint16)

func (RTPPacket) SetTimestamp

func (p RTPPacket) SetTimestamp(timestamp uint32)

func (RTPPacket) Timestamp

func (p RTPPacket) Timestamp() uint32

Timestamp of Packet

func (RTPPacket) Version

func (p RTPPacket) Version() int

Version of RTP

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 NewRequest

func NewRequest(method string, rawurl string) *Request

NewRequest returns

func ReadRequest

func ReadRequest(r *bufio.Reader) (request *Request, err error)

ReadRequest from reader

func (*Request) Bytes

func (r *Request) Bytes() []byte

Bytes of request

type Response

type Response struct {
	*Request
	ProtoMajor int
	ProtoMinor int
	StatusCode int
	CSeq       uint64 // for other arch system, use 32 bit integer
	Header     header.Header
	Body       []byte
}

Response of RTSP

func ReadResponse

func ReadResponse(r *bufio.Reader) (response *Response, err error)

ReadResponse from reader

func (*Response) Bytes

func (response *Response) Bytes() []byte

Bytes of RTSP response

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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