Documentation
¶
Overview ¶
Package sfu owns admitted physical publication and subscription resources.
Index ¶
- type Admission
- func (admission *Admission) BeginDrain(fence ResourceFence) bool
- func (admission *Admission) BeginDrainAll() []ResourceFence
- func (admission *Admission) BeginDrainRoom(roomID string) []ResourceFence
- func (admission *Admission) BeginSubscriptionDrain(fence SubscriptionFence) bool
- func (admission *Admission) CommitPublication(fence ResourceFence) ([]ResourceFence, bool)
- func (admission *Admission) CommitSubscription(fence SubscriptionFence) bool
- func (admission *Admission) CompleteDrain(fence ResourceFence) bool
- func (admission *Admission) CompleteSubscriptionDrain(fence SubscriptionFence) bool
- func (admission *Admission) HasPublication(fence ResourceFence) bool
- func (admission *Admission) HasSubscription(fence SubscriptionFence) bool
- func (admission *Admission) ReservePublication(fence ResourceFence) bool
- func (admission *Admission) ReserveSubscription(fence SubscriptionFence) bool
- func (admission *Admission) Usage() Usage
- type AdmissionOptions
- type Media
- func (media *Media) AcceptPublisherOffer(fence ResourceFence, connectionID string, offer webrtc.SessionDescription) (webrtc.SessionDescription, error)
- func (media *Media) AddPublisherICE(fence ResourceFence, connectionID string, candidate webrtc.ICECandidateInit) error
- func (media *Media) AddSubscriberICE(fence SubscriptionFence, connectionID string, ...) error
- func (media *Media) ApplySubscriberAnswer(fence SubscriptionFence, connectionID string, answer webrtc.SessionDescription) error
- func (media *Media) Close() error
- func (media *Media) ClosePublication(fence ResourceFence) error
- func (media *Media) CloseSubscription(fence SubscriptionFence, connectionID string) error
- func (media *Media) HasPublication(fence ResourceFence, connectionID string) bool
- func (media *Media) PreparePublication(fence ResourceFence, connectionID string, metadata PublicationMedia) error
- func (media *Media) PrepareSubscriber(ctx context.Context, fence SubscriptionFence, connectionID string) (_ webrtc.SessionDescription, err error)
- func (media *Media) PublicationDemand(fence ResourceFence, connectionID string) (int, error)
- func (media *Media) RestartSubscriber(fence SubscriptionFence, connectionID string) (webrtc.SessionDescription, error)
- func (media *Media) UpdatePublication(fence ResourceFence, connectionID string, metadata PublicationMedia) error
- type MediaEvent
- type MediaOptions
- type PublicationMedia
- type ResourceFence
- type Runtime
- type SubscriptionFence
- type Usage
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
type AdmissionOptions ¶
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) 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 ¶
ResourceFence is SfuResourceFence. It is a comparable value, so the TypeScript cloneFence/sameFence helpers are a plain copy and `==`.
type Runtime ¶
type Runtime interface {
HasPublication(ResourceFence, string) bool
PreparePublication(ResourceFence, string, PublicationMedia) error
UpdatePublication(ResourceFence, string, PublicationMedia) error
PublicationDemand(ResourceFence, string) (int, error)
AcceptPublisherOffer(ResourceFence, string, webrtc.SessionDescription) (webrtc.SessionDescription, error)
AddPublisherICE(ResourceFence, string, webrtc.ICECandidateInit) error
PrepareSubscriber(context.Context, SubscriptionFence, string) (webrtc.SessionDescription, error)
ApplySubscriberAnswer(SubscriptionFence, string, webrtc.SessionDescription) error
AddSubscriberICE(SubscriptionFence, string, webrtc.ICECandidateInit) error
RestartSubscriber(SubscriptionFence, string) (webrtc.SessionDescription, error)
CloseSubscription(SubscriptionFence, string) error
ClosePublication(ResourceFence) error
}
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.