StreamRegistry

Struct StreamRegistry 

Source
pub struct StreamRegistry { /* private fields */ }
Expand description

Central registry for all active streams

Thread-safe via RwLock. Read-heavy workloads (subscriber count checks, broadcasting) benefit from the concurrent read access.

Implementations§

Source§

impl StreamRegistry

Source

pub fn new() -> Self

Create a new stream registry with default configuration

Source

pub fn with_config(config: RegistryConfig) -> Self

Create a new stream registry with custom configuration

Source

pub fn config(&self) -> &RegistryConfig

Get the registry configuration

Source

pub async fn register_publisher( &self, key: &StreamKey, session_id: u64, ) -> Result<(), RegistryError>

Register a publisher for a stream

If the stream doesn’t exist, it will be created. If the stream exists and is in grace period, the publisher reclaims it. Returns an error if the stream already has an active publisher.

Source

pub async fn unregister_publisher(&self, key: &StreamKey, session_id: u64)

Unregister a publisher from a stream

The stream enters grace period if there are active subscribers, allowing the publisher to reconnect.

Source

pub async fn subscribe( &self, key: &StreamKey, ) -> Result<(Receiver<BroadcastFrame>, Vec<BroadcastFrame>), RegistryError>

Subscribe to a stream

Returns a broadcast receiver and catchup frames for the subscriber. The catchup frames contain sequence headers and recent GOP data.

Source

pub async fn unsubscribe(&self, key: &StreamKey)

Unsubscribe from a stream

Source

pub async fn broadcast(&self, key: &StreamKey, frame: BroadcastFrame)

Broadcast a frame to all subscribers of a stream

Also updates the GOP buffer and sequence headers as needed.

Source

pub async fn get_sequence_headers(&self, key: &StreamKey) -> Vec<BroadcastFrame>

Get sequence headers for a stream (video and audio decoder config)

Used when resuming playback after pause to reinitialize decoders.

Source

pub async fn has_active_stream(&self, key: &StreamKey) -> bool

Check if a stream exists and has an active publisher

Source

pub async fn stream_exists(&self, key: &StreamKey) -> bool

Check if a stream exists (active or in grace period)

Source

pub async fn get_stream_stats(&self, key: &StreamKey) -> Option<StreamStats>

Get stream statistics

Source

pub async fn stream_count(&self) -> usize

Get total number of streams

Source

pub async fn cleanup(&self)

Run cleanup task once

Removes streams that have:

  • Been in grace period longer than publisher_grace_period
  • Been idle longer than idle_stream_timeout
Source

pub fn spawn_cleanup_task(self: &Arc<Self>) -> JoinHandle<()>

Spawn background cleanup task

Returns a handle that can be used to abort the task.

Trait Implementations§

Source§

impl Default for StreamRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more