Documentation
¶
Index ¶
- Constants
- func ShouldUseSDKSource(req interface{ ... }) bool
- type AudioConfig
- type AudioRouteConfig
- type AudioRouteMatch
- type AudioTempoController
- type BaseConfig
- type CPUCostConfig
- type DebugConfig
- type File
- type FileConfig
- type Image
- type ImageConfig
- type LatencyConfig
- type Manifest
- type MemorySource
- type OutputConfig
- type PipelineConfig
- func (p *PipelineConfig) GetEncodedOutputs() []OutputConfig
- func (p *PipelineConfig) GetFileConfig() *FileConfig
- func (p *PipelineConfig) GetImageConfigs() []*ImageConfig
- func (p *PipelineConfig) GetSegmentConfig() *SegmentConfig
- func (p *PipelineConfig) GetStreamConfig() *StreamConfig
- func (p *PipelineConfig) GetWebsocketConfig() *StreamConfig
- func (p *PipelineConfig) IsReplay() bool
- func (p *PipelineConfig) Update(request *rpc.StartEgressRequest) error
- func (p *PipelineConfig) UpdateInfoFromSDK(identifier string, replacements map[string]string, w, h uint32) error
- type Playlist
- type SDKSourceParams
- type Segment
- type SegmentConfig
- type ServiceConfig
- type SessionLimits
- type SourceConfig
- type StorageConfig
- type StorageObserver
- type Stream
- type StreamConfig
- func (o *StreamConfig) AddStream(rawUrl string, outputType types.OutputType) (*Stream, error)
- func (o StreamConfig) GetOutputType() types.OutputType
- func (o *StreamConfig) GetStream(rawUrl string) (*Stream, error)
- func (o *StreamConfig) ValidateUrl(rawUrl string, outputType types.OutputType) (parsed string, redacted string, streamID string, err error)
- type TestOverrides
- type TrackSource
- type VideoConfig
- type WebSourceParams
Constants ¶
View Source
const StreamKeyframeInterval = 4.0
View Source
const TmpDir = "/home/egress/tmp"
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AudioConfig ¶ added in v1.5.6
type AudioRouteConfig ¶ added in v1.13.0
type AudioRouteConfig struct {
Match AudioRouteMatch
Channel livekit.AudioChannel
}
type AudioRouteMatch ¶ added in v1.13.0
type AudioRouteMatch struct {
TrackID string
ParticipantIdentity string
ParticipantKind *lksdk.ParticipantKind
}
type AudioTempoController ¶ added in v1.11.0
type BaseConfig ¶ added in v1.5.3
type BaseConfig struct {
NodeID string // do not supply - will be overwritten
// required
Redis *redis.RedisConfig `yaml:"redis"` // redis config
ApiKey string `yaml:"api_key"` // (env LIVEKIT_API_KEY)
ApiSecret string `yaml:"api_secret"` // (env LIVEKIT_API_SECRET)
WsUrl string `yaml:"ws_url"` // (env LIVEKIT_WS_URL)
// optional
Logging *logger.Config `yaml:"logging"` // logging config
TemplateBase string `yaml:"template_base"` // custom template base url
ClusterID string `yaml:"cluster_id"` // cluster this instance belongs to
EnableChromeSandbox bool `yaml:"enable_chrome_sandbox"` // enable Chrome sandbox, requires extra docker configuration
MaxUploadQueue int `yaml:"max_upload_queue"` // maximum upload queue size, in minutes
DisallowLocalStorage bool `yaml:"disallow_local_storage"` // require an upload config for all requests
IOCreateTimeout time.Duration `yaml:"io_create_timeout"` // timeout for CreateEgress calls
IOUpdateTimeout time.Duration `yaml:"io_update_timeout"` // timeout for UpdateEgress calls
IOSelectionTimeout time.Duration `yaml:"io_selection_timeout"` // timeout for affinity stage of IO RPC
IOWorkers int `yaml:"io_workers"` // number of IO update workers
SessionLimits `yaml:"session_limits"` // session duration limits
StorageConfig *StorageConfig `yaml:"storage,omitempty"` // storage config
BackupConfig *StorageConfig `yaml:"backup,omitempty"` // backup config, for storage failures
S3AssumeRoleKey string `yaml:"s3_assume_role_key"` // if set, this key is used for S3 uploads to assume the role defined in the assume_role_arn field of the S3 config
S3AssumeRoleSecret string `yaml:"s3_assume_role_secret"` // if set, this secret is used for S3 uploads to assume the role defined in the assume_role_arn field of the S3 config
S3AssumeRoleArn string `yaml:"s3_assume_role_arn"` // if set, this arn is used by default for S3 uploads
S3AssumeRoleExternalID string `yaml:"s3_assume_role_external_id"` // if set, this external ID is used by default for S3 uploads
// advanced
Insecure bool `yaml:"insecure"` // allow chrome to connect to an insecure websocket, bypasses chrome LNA checks
Debug DebugConfig `yaml:"debug"` // create dot file on internal error
ChromeFlags map[string]interface{} `yaml:"chrome_flags"` // additional flags to pass to Chrome
Latency LatencyConfig `yaml:"latency"` // gstreamer latencies, modifying these may break the service
LatencyOverrides map[types.RequestType]LatencyConfig `yaml:"latency_overrides"` // latency overrides for different request types, experimental only, will be removed
EnableOneShotSenderReportSync bool `yaml:"enable_one_shot_sender_report_sync"` // temporary rollout flag enabling one-shot sender report correction for room composite / track requests that previously used audio PTS adjustment disabling
AudioTempoController AudioTempoController `yaml:"audio_tempo_controller"` // audio tempo controller
TestOverrides TestOverrides `yaml:"test_overrides"` // set of config overrides for testing purposes
}
func (*BaseConfig) InitLogger ¶ added in v1.13.0
func (c *BaseConfig) InitLogger(serviceName string, values ...interface{}) error
type CPUCostConfig ¶ added in v1.0.4
type CPUCostConfig struct {
MaxCpuUtilization float64 `yaml:"max_cpu_utilization"` // maximum allowed CPU utilization when deciding to accept a request. Default to 80%
MaxMemory float64 `yaml:"max_memory"` // maximum allowed memory usage in GB. 0 to disable
MemoryCost float64 `yaml:"memory_cost"` // minimum memory in GB
RoomCompositeCpuCost float64 `yaml:"room_composite_cpu_cost"`
AudioRoomCompositeCpuCost float64 `yaml:"audio_room_composite_cpu_cost"`
WebCpuCost float64 `yaml:"web_cpu_cost"`
AudioWebCpuCost float64 `yaml:"audio_web_cpu_cost"`
ParticipantCpuCost float64 `yaml:"participant_cpu_cost"`
TrackCompositeCpuCost float64 `yaml:"track_composite_cpu_cost"`
TrackCpuCost float64 `yaml:"track_cpu_cost"`
MaxPulseClients int `yaml:"max_pulse_clients"` // pulse client limit for launching chrome
// Memory source configuration (cgroup-aware memory accounting)
MemorySource MemorySource `yaml:"memory_source"` // memory measurement source: proc_rss, cgroup
MemoryKillGraceSec int `yaml:"memory_kill_grace_sec"` // grace period in update cycles before kill (0 = immediate)
}
type DebugConfig ¶ added in v1.7.5
type DebugConfig struct {
EnableProfiling bool `yaml:"enable_profiling"` // create dot file and pprof on internal error
EnableTrackLogging bool `yaml:"enable_track_logging"` // log packets and keyframes for each track
EnableStreamLogging bool `yaml:"enable_stream_logging"` // log bytes and keyframes for each stream
EnableChromeLogging bool `yaml:"enable_chrome_logging"` // log all chrome console events
StorageConfig `yaml:",inline"` // upload config (S3, Azure, GCP, or AliOSS)
}
type FileConfig ¶ added in v1.7.1
type FileConfig struct {
FileInfo *livekit.FileInfo
LocalFilepath string
StorageFilepath string
DisableManifest bool
StorageConfig *StorageConfig
// contains filtered or unexported fields
}
func (FileConfig) GetOutputType ¶ added in v1.7.1
func (o FileConfig) GetOutputType() types.OutputType
type ImageConfig ¶ added in v1.7.13
type ImageConfig struct {
Id string // Used internally to map a gst Bin/element back to a sink and as part of the path
ImagesInfo *livekit.ImagesInfo
LocalDir string
StorageDir string
ImagePrefix string
ImageSuffix livekit.ImageFileSuffix
ImageExtension types.FileExtension
DisableManifest bool
StorageConfig *StorageConfig
CaptureInterval uint32
Width int32
Height int32
ImageOutCodec types.MimeType
// contains filtered or unexported fields
}
func (ImageConfig) GetOutputType ¶ added in v1.7.13
func (o ImageConfig) GetOutputType() types.OutputType
type LatencyConfig ¶ added in v1.10.0
type LatencyConfig struct {
JitterBufferLatency time.Duration `yaml:"jitter_buffer_latency"` // jitter buffer max latency for sdk egress
AudioMixerLatency time.Duration `yaml:"audio_mixer_latency"` // audio mixer latency, must be greater than jitter buffer latency
PipelineLatency time.Duration `yaml:"pipeline_latency"` // max latency for the entire pipeline
RTPMaxAllowedTsDiff time.Duration `ymal:"rtp_max_allowed_ts_diff"` // max allowed PTS discont. for a RTP stream, before applying PTS alignment
RTPMaxDriftAdjustment time.Duration `ymal:"rtp_max_drift_adjustment,omitempty"` // max allowed drift adjustment for a RTP stream
RTPDriftAdjustmentWindowPercent float64 `ymal:"rtp_drift_adjustment_window_percent,omitempty"` // how much to throttle drift adjustment, 0.0 disables it
OldPacketThreshold time.Duration `yaml:"old_packet_threshold,omitempty"` // syncrhonizer drops packets older than this, 0 to disable packet drops
}
type Manifest ¶ added in v1.5.3
type Manifest struct {
EgressID string `json:"egress_id,omitempty"`
RoomID string `json:"room_id,omitempty"`
RoomName string `json:"room_name,omitempty"`
Url string `json:"url,omitempty"`
StartedAt int64 `json:"started_at,omitempty"`
EndedAt int64 `json:"ended_at,omitempty"`
PublisherIdentity string `json:"publisher_identity,omitempty"`
TrackID string `json:"track_id,omitempty"`
TrackKind string `json:"track_kind,omitempty"`
TrackSource string `json:"track_source,omitempty"`
AudioTrackID string `json:"audio_track_id,omitempty"`
VideoTrackID string `json:"video_track_id,omitempty"`
Files []*File `json:"files,omitempty"`
Playlists []*Playlist `json:"playlists,omitempty"`
Images []*Image `json:"images,omitempty"`
// contains filtered or unexported fields
}
func (*Manifest) AddPlaylist ¶ added in v1.9.0
type MemorySource ¶ added in v1.13.0
type MemorySource string
MemorySource defines how memory usage is measured for admission and kill decisions.
const ( // MemorySourceProcRSS uses per-process RSS sum from hwstats (existing behavior). MemorySourceProcRSS MemorySource = "proc_rss" // MemorySourceCgroup uses cgroup-aware memory usage (working set). MemorySourceCgroup MemorySource = "cgroup" )
type OutputConfig ¶ added in v1.5.6
type OutputConfig interface {
GetOutputType() types.OutputType
}
type PipelineConfig ¶ added in v1.5.3
type PipelineConfig struct {
BaseConfig `yaml:",inline"`
HandlerID string `yaml:"handler_id"`
TmpDir string `yaml:"tmp_dir"`
types.RequestType `yaml:"-"`
SourceConfig `yaml:"-"`
AudioConfig `yaml:"-"`
VideoConfig `yaml:"-"`
Outputs map[types.EgressType][]OutputConfig `yaml:"-"`
OutputCount atomic.Int32 `yaml:"-"`
FinalizationRequired bool `yaml:"-"`
Info *livekit.EgressInfo `yaml:"-"`
Manifest *Manifest `yaml:"-"`
Live bool `yaml:"-"`
StorageObserver StorageObserver `yaml:"-"`
}
func GetValidatedPipelineConfig ¶ added in v1.5.3
func GetValidatedPipelineConfig(conf *ServiceConfig, req *rpc.StartEgressRequest) (*PipelineConfig, error)
func NewPipelineConfig ¶ added in v1.5.3
func NewPipelineConfig(confString string, req *rpc.StartEgressRequest) (*PipelineConfig, error)
func (*PipelineConfig) GetEncodedOutputs ¶ added in v1.7.13
func (p *PipelineConfig) GetEncodedOutputs() []OutputConfig
func (*PipelineConfig) GetFileConfig ¶ added in v1.7.1
func (p *PipelineConfig) GetFileConfig() *FileConfig
func (*PipelineConfig) GetImageConfigs ¶ added in v1.7.13
func (p *PipelineConfig) GetImageConfigs() []*ImageConfig
func (*PipelineConfig) GetSegmentConfig ¶ added in v1.7.1
func (p *PipelineConfig) GetSegmentConfig() *SegmentConfig
func (*PipelineConfig) GetStreamConfig ¶ added in v1.7.1
func (p *PipelineConfig) GetStreamConfig() *StreamConfig
func (*PipelineConfig) GetWebsocketConfig ¶ added in v1.7.1
func (p *PipelineConfig) GetWebsocketConfig() *StreamConfig
func (*PipelineConfig) IsReplay ¶ added in v1.13.0
func (p *PipelineConfig) IsReplay() bool
IsReplay returns true when this is a replay/export pipeline. Use this for replay-specific integration points (IPC calls, storage access). For generic pipeline behavior (is-live, leaky queues, backpressure) use the Live field.
func (*PipelineConfig) Update ¶ added in v1.5.3
func (p *PipelineConfig) Update(request *rpc.StartEgressRequest) error
func (*PipelineConfig) UpdateInfoFromSDK ¶ added in v1.5.6
func (p *PipelineConfig) UpdateInfoFromSDK(identifier string, replacements map[string]string, w, h uint32) error
UpdateInfoFromSDK - updates the pipeline config with the identifier, replacements, width, and height
type Playlist ¶ added in v1.9.0
type Playlist struct {
Location string `json:"location,omitempty"`
Segments []*Segment `json:"segments,omitempty"`
// contains filtered or unexported fields
}
func (*Playlist) AddSegment ¶ added in v1.9.0
func (*Playlist) UpdateLocation ¶ added in v1.9.0
type SDKSourceParams ¶ added in v1.5.6
type SDKSourceParams struct {
TrackID string
AudioTrackID string
VideoTrackID string
Identity string
TrackSource string
TrackKind string
VideoInCodec types.MimeType
AudioTracks []*TrackSource
VideoTrack *TrackSource
AudioRoutes []AudioRouteConfig
}
type SegmentConfig ¶ added in v1.7.1
type SegmentConfig struct {
SegmentsInfo *livekit.SegmentsInfo
LocalDir string
StorageDir string
PlaylistFilename string
LivePlaylistFilename string
SegmentPrefix string
SegmentSuffix livekit.SegmentedFileSuffix
SegmentDuration int
DisableManifest bool
StorageConfig *StorageConfig
// contains filtered or unexported fields
}
func (SegmentConfig) GetOutputType ¶ added in v1.7.1
func (o SegmentConfig) GetOutputType() types.OutputType
type ServiceConfig ¶ added in v1.5.3
type ServiceConfig struct {
BaseConfig `yaml:",inline"`
HealthPort int `yaml:"health_port"` // health check port
TemplatePort int `yaml:"template_port"` // room composite template server port
PrometheusPort int `yaml:"prometheus_port"` // prometheus handler port
DebugHandlerPort int `yaml:"debug_handler_port"` // egress debug handler port
*CPUCostConfig `yaml:"cpu_cost"` // CPU costs for the different egress types
}
func NewServiceConfig ¶ added in v1.5.3
func NewServiceConfig(confString string) (*ServiceConfig, error)
func (*ServiceConfig) InitDefaults ¶ added in v1.9.0
func (c *ServiceConfig) InitDefaults()
type SessionLimits ¶ added in v1.2.0
type SessionLimits struct {
FileOutputMaxDuration time.Duration `yaml:"file_output_max_duration"`
FileOutputMaxSize int64 `yaml:"file_output_max_size"` // max on-disk size in bytes before stopping; 0 to disable
StreamOutputMaxDuration time.Duration `yaml:"stream_output_max_duration"`
SegmentOutputMaxDuration time.Duration `yaml:"segment_output_max_duration"`
ImageOutputMaxDuration time.Duration `yaml:"image_output_max_duration"`
}
type SourceConfig ¶ added in v1.5.6
type SourceConfig struct {
SourceType types.SourceType
WebSourceParams
SDKSourceParams
}
type StorageConfig ¶ added in v1.7.5
type StorageConfig struct {
Prefix string `yaml:"prefix"` // prefix applied to all filenames
GeneratePresignedUrl bool `yaml:"generate_presigned_url"`
S3 *storage.S3Config `yaml:"s3"` // upload to s3
Azure *storage.AzureConfig `yaml:"azure"` // upload to azure
GCP *storage.GCPConfig `yaml:"gcp"` // upload to gcp
AliOSS *storage.AliOSSConfig `yaml:"alioss"` // upload to aliyun
}
func (*StorageConfig) IsLocal ¶ added in v1.9.0
func (c *StorageConfig) IsLocal() bool
type StorageObserver ¶ added in v1.13.0
type Stream ¶ added in v1.8.6
type Stream struct {
Name string // gstreamer stream ID
ParsedUrl string // parsed/validated url
RedactedUrl string // url with stream key removed
StreamID string // stream ID used by rtmpconnection
StreamInfo *livekit.StreamInfo
// contains filtered or unexported fields
}
func (*Stream) ShouldSendRetryUpdate ¶ added in v1.12.0
func (*Stream) UpdateEndTime ¶ added in v1.8.6
type StreamConfig ¶ added in v1.7.1
type StreamConfig struct {
// url -> Stream
Streams sync.Map
// contains filtered or unexported fields
}
func (*StreamConfig) AddStream ¶ added in v1.8.6
func (o *StreamConfig) AddStream(rawUrl string, outputType types.OutputType) (*Stream, error)
func (StreamConfig) GetOutputType ¶ added in v1.7.1
func (o StreamConfig) GetOutputType() types.OutputType
func (*StreamConfig) GetStream ¶ added in v1.8.6
func (o *StreamConfig) GetStream(rawUrl string) (*Stream, error)
func (*StreamConfig) ValidateUrl ¶ added in v1.8.6
func (o *StreamConfig) ValidateUrl(rawUrl string, outputType types.OutputType) ( parsed string, redacted string, streamID string, err error, )
type TestOverrides ¶ added in v1.13.0
type TestOverrides struct {
// inject failure for rooms containing this substring, useful for testing failure conditions
FailureInjectionRoom string `yaml:"failure_injection_room"`
}
TestOverrides is used to override the default configuration for testing purposes.
type TrackSource ¶ added in v1.7.8
type TrackSource struct {
TrackID string
TrackKind lksdk.TrackKind
ParticipantKind lksdk.ParticipantKind
AudioChannel *livekit.AudioChannel
AppSrc *app.Source
MimeType types.MimeType
PayloadType webrtc.PayloadType
ClockRate uint32
TempoController *tempo.Controller
OnKeyframeRequired func()
}
type VideoConfig ¶ added in v1.5.6
Click to show internal directories.
Click to hide internal directories.