transcoder

package
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Apr 23, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Overview

Package transcoder manages a bounded pool of FFmpeg worker processes. Each stream may run one FFmpeg process per ladder rung (passthrough copy or ABR encode); all read the same raw ingest. GPU acceleration (NVENC) is used when configured on profiles / global HW.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Profile

type Profile struct {
	Width            int
	Height           int
	Bitrate          string // e.g. "4000k"
	Codec            string // e.g. "h264_nvenc", "libx264"
	Preset           string // e.g. "p5" (NVENC), "fast" (libx264)
	CodecProfile     string // H.264/HEVC profile (baseline, main, high)
	CodecLevel       string // e.g. 4.1
	MaxBitrate       int    // kbps peak (0 = omit -maxrate)
	Framerate        float64
	KeyframeInterval int // GOP target in seconds (0 = encoder default)
}

Profile defines a single transcoding output rendition. Rendition label in logs and URLs is track_<n> from ladder order (see buffer.VideoTrackSlug).

type RenditionTarget

type RenditionTarget struct {
	BufferID domain.StreamCode
	Profile  Profile
}

RenditionTarget binds one encoded ladder rung to its Buffer Hub output slot.

type Service

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

Service manages the FFmpeg worker pool.

func New

func New(i do.Injector) (*Service, error)

New creates a Service and registers it with the DI injector.

func (*Service) SetFatalCallback

func (s *Service) SetFatalCallback(fn func(streamCode domain.StreamCode))

SetFatalCallback registers a function called when a transcoder profile exceeds its maximum restart count. The callback fires once per profile that gives up. It is safe to call this before or after Start.

func (*Service) Start

func (s *Service) Start(
	ctx context.Context,
	logStreamCode domain.StreamCode,
	rawIngestID domain.StreamCode,
	tc *domain.TranscoderConfig,
	targets []RenditionTarget,
) error

Start launches one FFmpeg encoder per RenditionTarget (same raw ingest, different output buffers).

func (*Service) StartProfile

func (s *Service) StartProfile(streamID domain.StreamCode, profileIndex int, target RenditionTarget) error

StartProfile starts a single FFmpeg encoder for one profile index on an existing stream worker.

func (*Service) Stop

func (s *Service) Stop(streamID domain.StreamCode)

Stop cancels all FFmpeg encoders for a stream and waits for them to exit.

func (*Service) StopProfile

func (s *Service) StopProfile(streamID domain.StreamCode, profileIndex int)

StopProfile stops a single FFmpeg encoder for one profile index.

Jump to

Keyboard shortcuts

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