core

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2023 License: MIT Imports: 14 Imported by: 3

Documentation

Index

Constants

View Source
const (
	DirectionRecvonly = "recvonly"
	DirectionSendonly = "sendonly"
	DirectionSendRecv = "sendrecv"
)
View Source
const (
	KindVideo = "video"
	KindAudio = "audio"
)
View Source
const (
	CodecH264 = "H264" // payloadType: 96
	CodecH265 = "H265"
	CodecVP8  = "VP8"
	CodecVP9  = "VP9"
	CodecAV1  = "AV1"
	CodecJPEG = "JPEG" // payloadType: 26

	CodecPCMU = "PCMU" // payloadType: 0
	CodecPCMA = "PCMA" // payloadType: 8
	CodecAAC  = "MPEG4-GENERIC"
	CodecOpus = "OPUS" // payloadType: 111
	CodecG722 = "G722"
	CodecMP3  = "MPA" // payload: 14, aka MPEG-1 Layer III
	CodecPCM  = "L16" // Linear PCM

	CodecELD = "ELD" // AAC-ELD

	CodecAll = "ALL"
	CodecAny = "ANY"
)
View Source
const (
	UnsupportedCodec    = "unsupported codec"
	WrongMediaDirection = "wrong media direction"
)
View Source
const PayloadTypeRAW byte = 255

Variables

View Source
var ErrCantGetTrack = errors.New("can't get track")

Functions

func Assert

func Assert(ok bool)

func Between

func Between(s, sub1, sub2 string) string

func Caller

func Caller() string

func DecodeH264

func DecodeH264(fmtp string) string

func GetKind

func GetKind(name string) string

func MarshalSDP

func MarshalSDP(name string, medias []*Media) ([]byte, error)

func RandString

func RandString(size, base byte) string

RandString base10 - numbers, base16 - hex, base36 - digits+letters, base64 - URL safe symbols

Types

type Codec

type Codec struct {
	Name        string // H264, PCMU, PCMA, opus...
	ClockRate   uint32 // 90000, 8000, 16000...
	Channels    uint16 // 0, 1, 2
	FmtpLine    string
	PayloadType uint8
}

func UnmarshalCodec

func UnmarshalCodec(md *sdp.MediaDescription, payloadType string) *Codec

func (*Codec) Clone

func (c *Codec) Clone() *Codec

func (*Codec) IsRTP

func (c *Codec) IsRTP() bool

func (*Codec) Match

func (c *Codec) Match(remote *Codec) bool

func (*Codec) String

func (c *Codec) String() string

func (*Codec) Text

func (c *Codec) Text() string

type Consumer

type Consumer interface {
	// GetMedias - return Media(s) with local Media.Direction:
	// - sendonly for Consumer Video/Audio
	// - recvonly for Consumer backchannel
	GetMedias() []*Media

	AddTrack(media *Media, codec *Codec, track *Receiver) error

	Stop() error
}

type EventFunc

type EventFunc func(msg any)

type HandlerFunc

type HandlerFunc func(packet *rtp.Packet)

HandlerFunc like http.HandlerFunc

type Info

type Info struct {
	Type       string      `json:"type,omitempty"`
	URL        string      `json:"url,omitempty"`
	RemoteAddr string      `json:"remote_addr,omitempty"`
	UserAgent  string      `json:"user_agent,omitempty"`
	Medias     []*Media    `json:"medias,omitempty"`
	Receivers  []*Receiver `json:"receivers,omitempty"`
	Senders    []*Sender   `json:"senders,omitempty"`
	Recv       int         `json:"recv,omitempty"`
	Send       int         `json:"send,omitempty"`
}

type Listener

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

Listener base struct for all classes with support feedback

func (*Listener) Fire

func (l *Listener) Fire(msg any)

func (*Listener) Listen

func (l *Listener) Listen(f EventFunc)

type Media

type Media struct {
	Kind      string   `json:"kind,omitempty"`      // video or audio
	Direction string   `json:"direction,omitempty"` // sendonly, recvonly
	Codecs    []*Codec `json:"codecs,omitempty"`

	ID string `json:"id,omitempty"` // MID for WebRTC, Control for RTSP
}

Media take best from: - deepch/vdk/format/rtsp/sdp.Media - pion/sdp.MediaDescription

func ParseQuery

func ParseQuery(query map[string][]string) (medias []*Media)

func UnmarshalMedia

func UnmarshalMedia(md *sdp.MediaDescription) *Media

func (*Media) Clone

func (m *Media) Clone() *Media

func (*Media) MarshalJSON

func (m *Media) MarshalJSON() ([]byte, error)

func (*Media) MatchAll

func (m *Media) MatchAll() bool

func (*Media) MatchCodec

func (m *Media) MatchCodec(remote *Codec) *Codec

func (*Media) MatchMedia

func (m *Media) MatchMedia(remote *Media) (codec, remoteCodec *Codec)

func (*Media) String

func (m *Media) String() string

type Mode

type Mode byte
const (
	ModeActiveProducer Mode = iota + 1 // typical source (client)
	ModePassiveConsumer
	ModePassiveProducer
	ModeActiveConsumer
)

func (Mode) String

func (m Mode) String() string

type Probe

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

func NewProbe

func NewProbe(enable bool) *Probe

func (*Probe) Active

func (p *Probe) Active() bool

Active return true if probe enabled and not finish

func (*Probe) Append

func (p *Probe) Append(v any)

Append safe to run if Probe is nil

type Producer

type Producer interface {
	// GetMedias - return Media(s) with local Media.Direction:
	// - recvonly for Producer Video/Audio
	// - sendonly for Producer backchannel
	GetMedias() []*Media

	// GetTrack - return Receiver, that can only produce rtp.Packet(s)
	GetTrack(media *Media, codec *Codec) (*Receiver, error)

	Start() error
	Stop() error
}

type Receiver

type Receiver struct {
	Codec *Codec
	Media *Media

	ID byte // Channel for RTSP, PayloadType for MPEG-TS
	// contains filtered or unexported fields
}

func NewReceiver

func NewReceiver(media *Media, codec *Codec) *Receiver

func (*Receiver) Close

func (t *Receiver) Close()

func (*Receiver) MarshalJSON

func (t *Receiver) MarshalJSON() ([]byte, error)

func (*Receiver) Replace

func (t *Receiver) Replace(target *Receiver)

func (*Receiver) Senders

func (t *Receiver) Senders() (senders []*Sender)

func (*Receiver) String

func (t *Receiver) String() string

func (*Receiver) WriteRTP

func (t *Receiver) WriteRTP(packet *rtp.Packet)

WriteRTP - fast and non blocking write to all readers buffers

type Sender

type Sender struct {
	Codec *Codec
	Media *Media

	Handler HandlerFunc
	// contains filtered or unexported fields
}

func NewSender

func NewSender(media *Media, codec *Codec) *Sender

func (*Sender) Close

func (s *Sender) Close()

func (*Sender) HandleRTP

func (s *Sender) HandleRTP(track *Receiver)

func (*Sender) MarshalJSON

func (s *Sender) MarshalJSON() ([]byte, error)

func (*Sender) String

func (s *Sender) String() string

type Waiter

type Waiter struct {
	sync.WaitGroup
	// contains filtered or unexported fields
}

Waiter support: - autotart on first Wait - block new waiters after last Done - safe Done after finish

func (*Waiter) Add

func (w *Waiter) Add(delta int)

func (*Waiter) Done

func (w *Waiter) Done()

func (*Waiter) Wait

func (w *Waiter) Wait()

func (*Waiter) WaitChan

func (w *Waiter) WaitChan() <-chan struct{}

type Worker

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

func NewWorker

func NewWorker(d time.Duration, f func() time.Duration) *Worker

NewWorker run f after d

func (*Worker) Do

func (w *Worker) Do()

Do - instant timer run

func (*Worker) Stop

func (w *Worker) Stop()

Jump to

Keyboard shortcuts

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