sfu

package
v1.9.2 Latest Latest
Warning

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

Go to latest
Published: Oct 6, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package sfu owns admitted physical publication and subscription resources.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Admission

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

Admission is SfuResourceAdmission: the ingress/egress ledger for the embedded SFU. It is not safe for concurrent use; the signaling server calls it under its global mutex, exactly as Node's single thread did.

func NewAdmission

func NewAdmission(options AdmissionOptions) *Admission

NewAdmission mirrors the SfuResourceAdmission constructor. An invalid capacity panics where the TypeScript throws: the capacities come from a constant and from validated configuration, so this is an assertion.

func (*Admission) BeginDrain

func (admission *Admission) BeginDrain(fence ResourceFence) bool

func (*Admission) BeginDrainAll

func (admission *Admission) BeginDrainAll() []ResourceFence

func (*Admission) BeginDrainRoom

func (admission *Admission) BeginDrainRoom(roomID string) []ResourceFence

func (*Admission) BeginSubscriptionDrain

func (admission *Admission) BeginSubscriptionDrain(fence SubscriptionFence) bool

func (*Admission) CommitPublication

func (admission *Admission) CommitPublication(fence ResourceFence) ([]ResourceFence, bool)

CommitPublication returns false as its second result where TypeScript returns null; an empty slice with true is its empty array.

func (*Admission) CommitSubscription

func (admission *Admission) CommitSubscription(fence SubscriptionFence) bool

func (*Admission) CompleteDrain

func (admission *Admission) CompleteDrain(fence ResourceFence) bool

func (*Admission) CompleteSubscriptionDrain

func (admission *Admission) CompleteSubscriptionDrain(fence SubscriptionFence) bool

In-process closure revokes this exact connection; no reusable token remains.

func (*Admission) HasPublication

func (admission *Admission) HasPublication(fence ResourceFence) bool

func (*Admission) HasSubscription

func (admission *Admission) HasSubscription(fence SubscriptionFence) bool

func (*Admission) ReservePublication

func (admission *Admission) ReservePublication(fence ResourceFence) bool

func (*Admission) ReserveSubscription

func (admission *Admission) ReserveSubscription(fence SubscriptionFence) bool

func (*Admission) Usage

func (admission *Admission) Usage() Usage

type AdmissionOptions

type AdmissionOptions struct {
	IngressCapacity int
	EgressCapacity  int
}

AdmissionOptions is SfuResourceAdmissionOptions.

type Media

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

Media owns physical resources already authorized by the room's Admission. It does not admit rooms, issue credentials, retry, or choose route candidates.

func NewMedia

func NewMedia(options MediaOptions) *Media

func (*Media) AcceptPublisherOffer

func (media *Media) AcceptPublisherOffer(fence ResourceFence, connectionID string,
	offer webrtc.SessionDescription) (webrtc.SessionDescription, error)

func (*Media) AddPublisherICE

func (media *Media) AddPublisherICE(fence ResourceFence, connectionID string, candidate webrtc.ICECandidateInit) error

func (*Media) AddSubscriberICE

func (media *Media) AddSubscriberICE(fence SubscriptionFence, connectionID string, candidate webrtc.ICECandidateInit) error

func (*Media) ApplySubscriberAnswer

func (media *Media) ApplySubscriberAnswer(fence SubscriptionFence, connectionID string, answer webrtc.SessionDescription) error

func (*Media) Close

func (media *Media) Close() error

func (*Media) ClosePublication

func (media *Media) ClosePublication(fence ResourceFence) error

func (*Media) CloseSubscription

func (media *Media) CloseSubscription(fence SubscriptionFence, connectionID string) error

func (*Media) HasPublication

func (media *Media) HasPublication(fence ResourceFence, connectionID string) bool

func (*Media) PreparePublication

func (media *Media) PreparePublication(fence ResourceFence, connectionID string, metadata PublicationMedia) error

PreparePublication is called only after ReservePublication succeeds. Repeated preparation never replaces a live publication.

func (*Media) PrepareSubscriber

func (media *Media) PrepareSubscriber(ctx context.Context, fence SubscriptionFence,
	connectionID string) (_ webrtc.SessionDescription, err error)

PrepareSubscriber follows ReserveSubscription. Its context is the existing route operation deadline, not a second media timeout.

func (*Media) PublicationDemand

func (media *Media) PublicationDemand(fence ResourceFence, connectionID string) (int, error)

func (*Media) RestartSubscriber

func (media *Media) RestartSubscriber(fence SubscriptionFence, connectionID string) (webrtc.SessionDescription, error)

RestartSubscriber keeps the committed transport and asks ICE to recover it.

func (*Media) UpdatePublication

func (media *Media) UpdatePublication(fence ResourceFence, connectionID string, metadata PublicationMedia) error

type MediaEvent

type MediaEvent struct {
	Fence        ResourceFence
	ViewerPeerID string // Empty for the publisher.
	ConnectionID string
	Candidate    *webrtc.ICECandidateInit // Nil with StateUnknown ends ICE gathering.
	State        webrtc.PeerConnectionState
	ActiveCount  *int
}

type MediaOptions

type MediaOptions struct {
	// Settings can contain the application-owned UDP mux. Media never closes it.
	Settings webrtc.SettingEngine
	// Events run without media locks and hand exact handles back to room authority.
	// Physical close must be scheduled asynchronously from these callbacks.
	Events func(MediaEvent)
}

type PublicationMedia

type PublicationMedia struct {
	Codec        string
	RIDs         []string
	Formats      []forwarding.LayerFormat
	Audio        bool
	AudioBitrate uint32
}

PublicationMedia is metadata from the authorized publisher, not a quality ladder.

type ResourceFence

type ResourceFence struct {
	RoomID                string
	ShareGeneration       string
	PublicationGeneration string
}

ResourceFence is SfuResourceFence. It is a comparable value, so the TypeScript cloneFence/sameFence helpers are a plain copy and `==`.

type Runtime

Runtime is the physical boundary injected into the room router and its tests.

type SubscriptionFence

type SubscriptionFence struct {
	ResourceFence
	ViewerPeerID string
	ConnectionID string
}

SubscriptionFence is SfuSubscriptionFence, which extends SfuResourceFence. The embedded value is the `{ ...fence, viewerPeerId }` spread the router uses to derive one from a publication fence.

type Usage

type Usage struct {
	Ingress int
	Egress  int
}

Usage is SfuResourceUsage.

Directories

Path Synopsis
Package sfutest provides deterministic physical-media effects for router tests.
Package sfutest provides deterministic physical-media effects for router tests.

Jump to

Keyboard shortcuts

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