livemedia

package
v0.0.0-...-9ac6e9e Latest Latest
Warning

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

Go to latest
Published: Feb 16, 2020 License: LGPL-2.1 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RTP_UDP = iota
	RTP_TCP
	RAW_UDP
)
View Source
const (
	// RTCP packet types:
	RTCP_PT_SR   = 200
	RTCP_PT_RR   = 201
	RTCP_PT_SDES = 202
	RTCP_PT_BYE  = 203
	RTCP_PT_APP  = 204

	// SDES tags:
	RTCP_SDES_END   = 0
	RTCP_SDES_CNAME = 1
	RTCP_SDES_NAME  = 2
	RTCP_SDES_EMAIL = 3
	RTCP_SDES_PHONE = 4
	RTCP_SDES_LOC   = 5
	RTCP_SDES_TOOL  = 6
	RTCP_SDES_NOTE  = 7
	RTCP_SDES_PRIV  = 8

	// overhead (bytes) of IP and UDP hdrs
	IP_UDP_HDR_SIZE = 28

	PACKET_UNKNOWN_TYPE = 0
	PAKCET_RTP          = 1
	PACKET_RTCP_REPORT  = 2
	PACKET_BYE          = 3
)
View Source
const Million = 1000000

//////// RTPReceptionStats //////////

Variables

View Source
var AllowedCommandNames [maxCommandNum]string = [maxCommandNum]string{
	"OPTIONS",
	"DESCRIBE",
	"SETUP",
	"TEARDOWN",
	"PLAY",
	"PAUSE",
	"RECORD",
	"GET_PARAMETER",
	"SET_PARAMETER",
}

Handler routines for specific RTSP commands:

View Source
var (
	DefaultEndianness = binary.BigEndian
)
View Source
var OutPacketBufferMaxSize uint = 2000000

default

View Source
var TRANSPORT_PACKETS_PER_NETWORK_PACKET uint = 7
View Source
var TRANSPORT_PACKET_SIZE uint = 188

Functions

func ADVANCE

func ADVANCE(data []byte, size, n uint) ([]byte, uint)

func DateHeader

func DateHeader() string

A "Date:" header that can be used in a RTSP (or HTTP) response

func LittleEndianPutUint32

func LittleEndianPutUint32(n uint32, w io.Writer) (int, error)

func LittleEndianUint32

func LittleEndianUint32(b []byte) uint32

func OnExpire

func OnExpire(instance *RTCPInstance, members, senders, weSent, rtcpBW, avgRTCPSize, tc, tp float64)

func OnReceive

func OnReceive()

func ParsePlayNowHeader

func ParsePlayNowHeader(buf string) bool

func ParseScaleHeader

func ParseScaleHeader(buf string) (float32, bool)

func PutUint16

func PutUint16(n uint16, w io.Writer) (int, error)

func PutUint24

func PutUint24(n uint32, w io.Writer) (int, error)

func PutUint32

func PutUint32(n uint32, w io.Writer) (int, error)

func PutUint8

func PutUint8(n byte, w io.Writer) (int, error)

func Uint16

func Uint16(b []byte) uint16

func Uint32

func Uint32(b []byte) uint32

func Uint64

func Uint64(b []byte) uint64

Types

type BasicUDPSink

type BasicUDPSink struct {
	MediaSink
	// contains filtered or unexported fields
}

func NewBasicUDPSink

func NewBasicUDPSink(gs *gs.GroupSock) *BasicUDPSink

func (*BasicUDPSink) ContinuePlaying

func (s *BasicUDPSink) ContinuePlaying()

type BasicUDPSource

type BasicUDPSource struct {
	FramedSource
	// contains filtered or unexported fields
}

type BitVector

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

type BufferedPacket

type BufferedPacket struct {
	RTPSeqNo     uint32
	RTPTimestamp uint32

	RTPMarkerBit bool
	// contains filtered or unexported fields
}

func (*BufferedPacket) NextPacket

func (p *BufferedPacket) NextPacket() IBufferedPacket

func (*BufferedPacket) TimeReceived

func (p *BufferedPacket) TimeReceived() sys.Timeval

func (*BufferedPacket) UseCount

func (p *BufferedPacket) UseCount() uint

type BufferedPacketFactory

type BufferedPacketFactory struct {
}

type ByteStreamFileSource

type ByteStreamFileSource struct {
	FramedFileSource
	// contains filtered or unexported fields
}

func (*ByteStreamFileSource) FileSize

func (s *ByteStreamFileSource) FileSize() int64

type Destinations

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

////// Destinations ////////

type FileServerMediaSubsession

type FileServerMediaSubsession struct {
	OnDemandServerMediaSubsession
	// contains filtered or unexported fields
}

type FramedFileSource

type FramedFileSource struct {
	FramedSource
	// contains filtered or unexported fields
}

type FramedFilter

type FramedFilter struct {
	FramedSource
	// contains filtered or unexported fields
}

type FramedSource

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

func (*FramedSource) GetNextFrame

func (f *FramedSource) GetNextFrame(buffTo []byte, maxSize uint,
	afterGettingFunc, onCloseFunc interface{}) error

type H264BufferedPacket

type H264BufferedPacket struct {
	BufferedPacket
	// contains filtered or unexported fields
}

type H264BufferedPacketFactory

type H264BufferedPacketFactory struct {
	BufferedPacketFactory
}

type H264FUAFragmenter

type H264FUAFragmenter struct {
	FramedFilter
	// contains filtered or unexported fields
}

////// H264FUAFragmenter ////////

type H264FileMediaSubsession

type H264FileMediaSubsession struct {
	FileServerMediaSubsession
	// contains filtered or unexported fields
}

func NewH264FileMediaSubsession

func NewH264FileMediaSubsession(fileName string) *H264FileMediaSubsession

type H264VideoRTPSink

type H264VideoRTPSink struct {
	VideoRTPSink
	// contains filtered or unexported fields
}

////// H264VideoRTPSink ////////

func (*H264VideoRTPSink) AuxSDPLine

func (s *H264VideoRTPSink) AuxSDPLine() string

func (*H264VideoRTPSink) ContinuePlaying

func (s *H264VideoRTPSink) ContinuePlaying()

type H264VideoRTPSource

type H264VideoRTPSource struct {
	MultiFramedRTPSource
	// contains filtered or unexported fields
}

type H264VideoStreamFramer

type H264VideoStreamFramer struct {
	MPEGVideoStreamFramer
	// contains filtered or unexported fields
}

////// H264VideoStreamFramer ////////

type H264VideoStreamParser

type H264VideoStreamParser struct {
	MPEGVideoStreamParser
	// contains filtered or unexported fields
}

////// H264VideoStreamParser ////////

func (*H264VideoStreamParser) UsingSource

func (p *H264VideoStreamParser) UsingSource() *H264VideoStreamFramer

type HTTPRequestInfo

type HTTPRequestInfo struct {
	CmdName       string
	UrlPreSuffix  string
	UrlSuffix     string
	AcceptStr     string
	SessionCookie string
}

func ParseHTTPRequestString

func ParseHTTPRequestString(reqStr string, reqStrSize int) (*HTTPRequestInfo, bool)

type IBufferedPacket

type IBufferedPacket interface {
	UseCount() uint

	TimeReceived() sys.Timeval
	NextPacket() IBufferedPacket
	// contains filtered or unexported methods
}

type IBufferedPacketFactory

type IBufferedPacketFactory interface {
	// contains filtered or unexported methods
}

type IFramedSource

type IFramedSource interface {
	GetNextFrame(buffTo []byte, maxSize uint, afterGettingFunc, onCloseFunc interface{}) error
	// contains filtered or unexported methods
}

type IMediaSink

type IMediaSink interface {
	AuxSDPLine() string

	StartPlaying(source IFramedSource, afterFunc interface{}) bool
	StopPlaying()
	ContinuePlaying()
	// contains filtered or unexported methods
}

////// MediaSink ////////

type IServerMediaSubsession

type IServerMediaSubsession interface {
	GetStreamParameters(tcpSocketNum net.Conn, destAddr, clientSessionID string,
		clientRTPPort, clientRTCPPort, rtpChannelID, rtcpChannelID uint) *StreamParameter
	TestScaleFactor(scale float32) float32
	//Duration() float32
	IncrTrackNumber()
	TrackID() string
	SDPLines() string
	CNAME() string
	StartStream(clientSessionID string, streamState *StreamState,
		rtcpRRHandler, serverRequestAlternativeByteHandler interface{}) (uint32, uint32)
	PauseStream(streamState *StreamState)
	DeleteStream(sessionID string, streamState *StreamState)
	SeekStream(sessionID string, streamState *StreamState, streamDuration float32)
	// contains filtered or unexported methods
}

type M2TSFileMediaSubsession

type M2TSFileMediaSubsession struct {
	FileServerMediaSubsession
	// contains filtered or unexported fields
}

func NewM2TSFileMediaSubsession

func NewM2TSFileMediaSubsession(fileName string) *M2TSFileMediaSubsession

func (*M2TSFileMediaSubsession) Duration

func (s *M2TSFileMediaSubsession) Duration() float32

type M2TSVideoStreamFramer

type M2TSVideoStreamFramer struct {
	FramedFilter
	// contains filtered or unexported fields
}

func NewM2TSVideoStreamFramer

func NewM2TSVideoStreamFramer(inputSource IFramedSource) *M2TSVideoStreamFramer

type MPEGVideoStreamFramer

type MPEGVideoStreamFramer struct {
	FramedFilter
	// contains filtered or unexported fields
}

type MPEGVideoStreamParser

type MPEGVideoStreamParser struct {
	StreamParser
	// contains filtered or unexported fields
}

type MediaSession

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

////// MediaSession ////////

func NewMediaSession

func NewMediaSession(sdpDesc string) *MediaSession

func (*MediaSession) AbsEndTime

func (s *MediaSession) AbsEndTime() string

func (*MediaSession) AbsStartTime

func (s *MediaSession) AbsStartTime() string

func (*MediaSession) ControlPath

func (s *MediaSession) ControlPath() string

func (*MediaSession) HasSubsessions

func (session *MediaSession) HasSubsessions() bool

func (*MediaSession) Scale

func (s *MediaSession) Scale() float32

func (*MediaSession) Subsession

func (s *MediaSession) Subsession() *MediaSubsession

type MediaSink

type MediaSink struct {
	Source IFramedSource
	// contains filtered or unexported fields
}

func (*MediaSink) AuxSDPLine

func (s *MediaSink) AuxSDPLine() string

func (*MediaSink) InitMediaSink

func (s *MediaSink) InitMediaSink(rtpSink IMediaSink)

func (*MediaSink) OnSourceClosure

func (s *MediaSink) OnSourceClosure()

func (*MediaSink) StartPlaying

func (s *MediaSink) StartPlaying(source IFramedSource, afterFunc interface{}) bool

func (*MediaSink) StopPlaying

func (s *MediaSink) StopPlaying()

type MediaSubsession

type MediaSubsession struct {
	RTPSource *RTPSource

	Sink IMediaSink

	MiscPtr interface{}
	// contains filtered or unexported fields
}

////// MediaSubsession ////////

func NewMediaSubsession

func NewMediaSubsession(parent *MediaSession) *MediaSubsession

func (*MediaSubsession) AbsEndTime

func (s *MediaSubsession) AbsEndTime() string

func (*MediaSubsession) AbsStartTime

func (s *MediaSubsession) AbsStartTime() string

func (*MediaSubsession) ClientPortNum

func (s *MediaSubsession) ClientPortNum() uint

func (*MediaSubsession) CodecName

func (s *MediaSubsession) CodecName() string

func (*MediaSubsession) ConnectionEndpointName

func (s *MediaSubsession) ConnectionEndpointName() (name string)

func (*MediaSubsession) ControlPath

func (s *MediaSubsession) ControlPath() string

func (*MediaSubsession) Initiate

func (s *MediaSubsession) Initiate() bool

func (*MediaSubsession) MediumName

func (s *MediaSubsession) MediumName() string

func (*MediaSubsession) ParentSession

func (subsession *MediaSubsession) ParentSession() *MediaSession

func (*MediaSubsession) ProtocolName

func (s *MediaSubsession) ProtocolName() string

func (*MediaSubsession) ReadSource

func (s *MediaSubsession) ReadSource() IFramedSource

func (*MediaSubsession) RtcpInstance

func (s *MediaSubsession) RtcpInstance() *RTCPInstance

func (*MediaSubsession) Scale

func (s *MediaSubsession) Scale() float32

func (*MediaSubsession) SessionID

func (s *MediaSubsession) SessionID() string

func (*MediaSubsession) SetConnectionEndpointName

func (s *MediaSubsession) SetConnectionEndpointName(connectionEndpointName string)

func (*MediaSubsession) SetDestinations

func (s *MediaSubsession) SetDestinations(destAddress string)

func (*MediaSubsession) SetRTCPChannelID

func (s *MediaSubsession) SetRTCPChannelID(rtcpChannelID uint)

func (*MediaSubsession) SetRTPChannelID

func (s *MediaSubsession) SetRTPChannelID(rtpChannelID uint)

func (*MediaSubsession) SetServerPortNum

func (s *MediaSubsession) SetServerPortNum(serverPortNum uint)

func (*MediaSubsession) SetSessionID

func (s *MediaSubsession) SetSessionID(sessionID string)

type MultiFramedRTPSink

type MultiFramedRTPSink struct {
	RTPSink
	// contains filtered or unexported fields
}

func (*MultiFramedRTPSink) InitMultiFramedRTPSink

func (s *MultiFramedRTPSink) InitMultiFramedRTPSink(rtpSink IMediaSink,
	rtpGroupSock *gs.GroupSock, rtpPayloadType, rtpTimestampFrequency uint32, rtpPayloadFormatName string)

func (*MultiFramedRTPSink) SpecialHeaderSize

func (s *MultiFramedRTPSink) SpecialHeaderSize() uint

default implementation: Assume no special header:

type MultiFramedRTPSource

type MultiFramedRTPSource struct {
	RTPSource
	// contains filtered or unexported fields
}

type OnDemandServerMediaSubsession

type OnDemandServerMediaSubsession struct {
	ServerMediaSubsession
	// contains filtered or unexported fields
}

func (*OnDemandServerMediaSubsession) CNAME

func (*OnDemandServerMediaSubsession) DeleteStream

func (s *OnDemandServerMediaSubsession) DeleteStream(sessionID string, streamState *StreamState)

func (*OnDemandServerMediaSubsession) GetStreamParameters

func (s *OnDemandServerMediaSubsession) GetStreamParameters(tcpSocketNum net.Conn, destAddr,
	clientSessionID string, clientRTPPort, clientRTCPPort, rtpChannelID, rtcpChannelID uint) *StreamParameter

func (*OnDemandServerMediaSubsession) PauseStream

func (s *OnDemandServerMediaSubsession) PauseStream(streamState *StreamState)

func (*OnDemandServerMediaSubsession) SDPLines

func (s *OnDemandServerMediaSubsession) SDPLines() string

func (*OnDemandServerMediaSubsession) SeekStream

func (s *OnDemandServerMediaSubsession) SeekStream(sessionID string, streamState *StreamState, streamDuration float32)

func (*OnDemandServerMediaSubsession) StartStream

func (s *OnDemandServerMediaSubsession) StartStream(clientSessionID string, streamState *StreamState,
	rtcpRRHandler, serverRequestAlternativeByteHandler interface{}) (rtpSeqNum, rtpTimestamp uint32)

type OutPacketBuffer

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

////// OutPacketBuffer ////////

type PIDStatus

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

func NewPIDStatus

func NewPIDStatus() *PIDStatus

type PacketInfo

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

type RTCPInstance

type RTCPInstance struct {
	CNAME  *SDESItem
	Sink   IMediaSink
	Source *RTPSource

	SRHandlerTask interface{}
	RRHandlerTask interface{}
	// contains filtered or unexported fields
}

func (*RTCPInstance) NumMembers

func (r *RTCPInstance) NumMembers() uint

func (*RTCPInstance) SetByeHandler

func (r *RTCPInstance) SetByeHandler(handlerTask interface{}, clientData interface{})

type RTPInterface

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

type RTPReceptionStats

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

type RTPReceptionStatsDB

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

//////// RTPReceptionStatsDB //////////

type RTPSink

type RTPSink struct {
	MediaSink
	// contains filtered or unexported fields
}

////// RTPSink ////////

func (*RTPSink) InitRTPSink

func (s *RTPSink) InitRTPSink(rtpSink IMediaSink, g *gs.GroupSock, rtpPayloadType,
	rtpTimestampFrequency uint32, rtpPayloadFormatName string)

type RTPSource

type RTPSource struct {
	FramedSource
	// contains filtered or unexported fields
}

func (*RTPSource) SetStreamSocket

func (s *RTPSource) SetStreamSocket()

type RTPTransmissionStats

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

////// RTPTransmissionStats ////////

type RTPTransmissionStatsDB

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

////// RTPTransmissionStatsDB ////////

type RTSPRequestInfo

type RTSPRequestInfo struct {
	Cseq          string
	CmdName       string
	SessionIDStr  string
	UrlPreSuffix  string
	UrlSuffix     string
	ContentLength string
}

func ParseRTSPRequestString

func ParseRTSPRequestString(reqStr string, reqStrSize int) (*RTSPRequestInfo, bool)

type RangeHeader

type RangeHeader struct {
	RangeStart   float32
	RangeEnd     float32
	AbsStartTime string
	AbsEndTime   string
}

func ParseRangeHeader

func ParseRangeHeader(buf string) (*RangeHeader, bool)

type ReorderingPacketBuffer

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

type SDESItem

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

type SPropRecord

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

type ServerMediaSession

type ServerMediaSession struct {
	SubsessionCounter int

	Subsessions []IServerMediaSubsession
	// contains filtered or unexported fields
}

func NewServerMediaSession

func NewServerMediaSession(description, streamName string) *ServerMediaSession

func (*ServerMediaSession) AddSubsession

func (s *ServerMediaSession) AddSubsession(subsession IServerMediaSubsession)

func (*ServerMediaSession) Duration

func (s *ServerMediaSession) Duration() float32

func (*ServerMediaSession) GenerateSDPDescription

func (s *ServerMediaSession) GenerateSDPDescription() string

func (*ServerMediaSession) StreamName

func (s *ServerMediaSession) StreamName() string

func (*ServerMediaSession) TestScaleFactor

func (s *ServerMediaSession) TestScaleFactor() float32

type ServerMediaSubsession

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

func (*ServerMediaSubsession) Duration

func (s *ServerMediaSubsession) Duration() float32

default implementation: assume an unbounded session

func (*ServerMediaSubsession) IncrTrackNumber

func (s *ServerMediaSubsession) IncrTrackNumber()

func (*ServerMediaSubsession) TestScaleFactor

func (s *ServerMediaSubsession) TestScaleFactor(scale float32) float32

default implementation: Support scale = 1 only

func (*ServerMediaSubsession) TrackID

func (s *ServerMediaSubsession) TrackID() string

func (*ServerMediaSubsession) TrackNumber

func (s *ServerMediaSubsession) TrackNumber() uint

type SimpleRTPSink

type SimpleRTPSink struct {
	MultiFramedRTPSink
	// contains filtered or unexported fields
}

func (*SimpleRTPSink) AuxSDPLine

func (s *SimpleRTPSink) AuxSDPLine() string

func (*SimpleRTPSink) ContinuePlaying

func (s *SimpleRTPSink) ContinuePlaying()

type SocketDescriptor

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

type StreamParameter

type StreamParameter struct {
	IsMulticast     bool
	ClientRTPPort   uint
	ClientRTCPPort  uint
	ServerRTPPort   uint
	ServerRTCPPort  uint
	DestinationTTL  uint
	DestinationAddr string
	StreamToken     *StreamState
}

type StreamParser

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

type StreamState

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

////// StreamState ////////

func (*StreamState) RtpSink

func (s *StreamState) RtpSink() IMediaSink

func (*StreamState) ServerRTCPPort

func (s *StreamState) ServerRTCPPort() uint

func (*StreamState) ServerRTPPort

func (s *StreamState) ServerRTPPort() uint

type TimeCode

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

func NewTimeCode

func NewTimeCode() *TimeCode

type TransportHeader

type TransportHeader struct {
	StreamingMode     uint
	ClientRTPPortNum  uint
	ClientRTCPPortNum uint
	RTPChannelID      uint
	RTCPChannelID     uint
	DestinationTTL    uint
	DestinationAddr   string
	StreamingModeStr  string
}

func ParseTransportHeader

func ParseTransportHeader(reqStr string) *TransportHeader

type VideoRTPSink

type VideoRTPSink struct {
	MultiFramedRTPSink
}

Jump to

Keyboard shortcuts

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