mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-09-27 04:36:12 +08:00
102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package core
|
|
|
|
const (
|
|
DirectionRecvonly = "recvonly"
|
|
DirectionSendonly = "sendonly"
|
|
DirectionSendRecv = "sendrecv"
|
|
)
|
|
|
|
const (
|
|
KindVideo = "video"
|
|
KindAudio = "audio"
|
|
)
|
|
|
|
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
|
|
CodecFLAC = "FLAC"
|
|
|
|
CodecAll = "ALL"
|
|
CodecAny = "ANY"
|
|
)
|
|
|
|
const PayloadTypeRAW byte = 255
|
|
|
|
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 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 Mode byte
|
|
|
|
const (
|
|
ModeActiveProducer Mode = iota + 1 // typical source (client)
|
|
ModePassiveConsumer
|
|
ModePassiveProducer
|
|
ModeActiveConsumer
|
|
)
|
|
|
|
func (m Mode) String() string {
|
|
switch m {
|
|
case ModeActiveProducer:
|
|
return "active producer"
|
|
case ModePassiveConsumer:
|
|
return "passive consumer"
|
|
case ModePassiveProducer:
|
|
return "passive producer"
|
|
case ModeActiveConsumer:
|
|
return "active consumer"
|
|
}
|
|
return "unknown"
|
|
}
|
|
|
|
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"`
|
|
}
|
|
|
|
const (
|
|
UnsupportedCodec = "unsupported codec"
|
|
WrongMediaDirection = "wrong media direction"
|
|
)
|