@seydx/rtsp / RtspServerSink
Class: RtspServerSink
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:299
Sink that re-publishes a relayed stream as a multi-client RTSP server.
Each track is packetized exactly once and the resulting RTP is fanned out to every playing viewer over interleaved TCP, so the upstream is pulled a single time regardless of how many clients are connected. The server is created lazily via the relay, attaching to it on the first client and detaching once the last viewer leaves, and can optionally advertise an ONVIF talkback channel and require authentication.
Examples
import { Relay } from '@seydx/rtsp';
const relay = new Relay({ source });
const server = await relay.serveRtsp({ port: 8554, path: 'live' });
console.log('playing at', server.url);import { Relay, RtspAuth } from '@seydx/rtsp';
const relay = new Relay({ source });
const server = await relay.serveRtsp({
port: 8554,
auth: new RtspAuth({ username: 'admin', password: 'secret' }),
backchannel: true,
});
server.on('viewer:added', (count) => console.log('viewers:', count));See
Extends
TypedEmitter<RtspServerEvents>
Implements
SinkRtspSessionHost
Constructors
Constructor
new RtspServerSink(
relay,options?):RtspServerSink
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:336
Create an RTSP server sink bound to a relay.
Prefer Relay.serveRtsp, which constructs the sink, starts listening, and wires up backchannel handling for you.
Parameters
relay
The relay whose stream is re-published.
options?
Server configuration such as bind address, path, MTU, auth, and backchannel.
Returns
RtspServerSink
Overrides
TypedEmitter<RtspServerEvents>.constructor
Properties
auth?
readonlyoptionalauth?:RtspAuth
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:300
Optional authenticator for incoming requests.
When present, every request is checked against this authenticator before it is dispatched; unauthenticated requests receive a 401 challenge. When absent, all requests are served without authentication.
Implementation of
RtspSessionHost.auth
backchannelStreamId?
optionalbackchannelStreamId?:number
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:322
SDP streamid of the talkback (backchannel) media, if advertised.
When set, a viewer that sets up this stream may push audio back to the source over its interleaved RTP channel. Undefined when the source exposes no backchannel.
Implementation of
RtspSessionHost.backchannelStreamId
logger?
readonlyoptionallogger?:Logger
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:301
Optional logger for diagnostics.
Used to surface parse failures and request-handling errors. All logging is best-effort and guarded, so a missing logger silently disables it.
Implementation of
RtspSessionHost.logger
trackKinds
trackKinds: readonly
TrackKind[] =[]
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:324
Track kinds indexed by SDP streamid.
The element at index n describes the media kind (for example video or audio) of the track advertised with streamid=n in the SDP. Used to decide whether a viewer's subscription must be keyframe-gated.
Implementation of
RtspSessionHost.trackKinds
Accessors
backchannelFormat
Get Signature
get backchannelFormat():
BackchannelAdvertise|undefined
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:364
The talkback codec actually advertised to viewers, once the upstream is known.
Resolves to the negotiated format only after init has run and the upstream's backchannel (or the configured override) has been determined; otherwise undefined.
Example
const format = server.backchannelFormat;
if (format) console.log('talkback codec:', format.codec);Returns
BackchannelAdvertise | undefined
url
Get Signature
get url():
string
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:381
The fully qualified rtsp:// URL viewers connect to.
Includes the bound host and port (resolved after listen) and the stream path; when authentication is configured the username is shown with the password masked.
Example
await server.listen();
console.log('connect to', server.url);Returns
string
viewers
Get Signature
get viewers():
number
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:394
The number of viewers currently in the playing state.
Example
console.log('active viewers:', server.viewers);Returns
number
Methods
activate()
activate():
Promise<string>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:492
Ensure the upstream is live and resolve the DESCRIBE SDP.
Invoked by a session handling its first DESCRIBE. Attaches to the relay on the first call (which lazily opens the upstream) and returns a promise for the SDP, which resolves once headers for every track have been seen.
Returns
Promise<string>
The SDP describing the available media, including any talkback section.
Example
const sdp = await server.activate();Implementation of
RtspSessionHost.activate
close()
close():
Promise<void>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:688
Release all per-track muxers and reset state for a fresh upstream.
Closes every muxer, clears the track bookkeeping, and re-arms the deferred SDP so the sink can be reused when the relay reattaches. Called by the relay when the upstream ends or is detached.
Returns
Promise<void>
A promise that resolves once all muxers are closed.
Example
await server.close();Implementation of
emit()
emit<
E>(event, ...args):boolean
Defined in: util/emitter.ts:121
Emit an event, invoking all registered listeners synchronously.
The arguments are type-checked against the listener signature for the given event.
Type Parameters
E
E extends keyof RtspServerEvents
Parameters
event
E
Name of the event to emit
args
...Parameters<RtspServerEvents[E]>
Payload forwarded to each listener, matching the event's signature
Returns
boolean
true if the event had listeners, false otherwise
Example
service.emit('ready');Inherited from
TypedEmitter.emit
init()
init(
info):Promise<void>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:559
Initialize the sink for a freshly opened upstream.
Creates one RTP muxer per source track, records the track kinds, and (when requested) resolves the talkback media to advertise. Called by the relay when the upstream stream description becomes available.
Parameters
info
Description of the upstream tracks and any backchannel it offers.
Returns
Promise<void>
A promise that resolves once all per-track muxers are open.
Example
await server.init(streamInfo);Implementation of
listen()
listen():
Promise<RtspServerSink>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:416
Start the TCP listener and begin accepting RTSP clients.
Binding is idempotent: calling this again after the server is already listening returns immediately. When no explicit port was configured, the chosen ephemeral port is filled in and becomes visible via url.
Returns
Promise<RtspServerSink>
This sink, once the socket is bound.
Throws
If the socket cannot bind (for example, the port is in use).
Example
const server = new RtspServerSink(relay, { port: 8554 });
await server.listen();
console.log(server.url);off()
off<
E>(event,listener):this
Defined in: util/emitter.ts:99
Remove a previously registered listener for an event.
Only the exact listener reference passed to on or once is removed; passing a different function has no effect.
Type Parameters
E
E extends keyof RtspServerEvents
Parameters
event
E
Name of the event to unsubscribe from
listener
The exact listener reference to remove
Returns
this
This emitter, for chaining
Example
service.off('data', handler);Inherited from
TypedEmitter.off
on()
on<
E>(event,listener):this
Defined in: util/emitter.ts:55
Register a listener for an event.
The listener is invoked every time the event is emitted, until it is removed via off or removeAllListeners.
Type Parameters
E
E extends keyof RtspServerEvents
Parameters
event
E
Name of the event to subscribe to
listener
Callback invoked with the event's typed payload
Returns
this
This emitter, for chaining
Example
service.on('data', (chunk) => handle(chunk));Inherited from
TypedEmitter.on
onBackchannelRtp()
onBackchannelRtp(
rtp):void
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:474
Handle one inbound talkback RTP packet received from a viewer.
Forwards the packet to listeners by re-emitting it as a backchannel event; the relay (or application) is responsible for routing it toward the camera.
Parameters
rtp
Buffer
The raw RTP packet sent by the viewer.
Returns
void
Example
server.on('backchannel', (rtp) => camera.sendAudio(rtp));Implementation of
RtspSessionHost.onBackchannelRtp
once()
once<
E>(event,listener):this
Defined in: util/emitter.ts:77
Register a one-time listener for an event.
The listener is invoked at most once, on the next emission of the event, and is then automatically removed.
Type Parameters
E
E extends keyof RtspServerEvents
Parameters
event
E
Name of the event to subscribe to
listener
Callback invoked once with the event's typed payload
Returns
this
This emitter, for chaining
Example
service.once('ready', () => console.log('ready'));Inherited from
TypedEmitter.once
removeAllListeners()
removeAllListeners():
this
Defined in: util/emitter.ts:138
Remove all listeners for every event.
Typically used during teardown to ensure no callbacks fire after the owning object has been disposed.
Returns
this
This emitter, for chaining
Example
service.removeAllListeners();Inherited from
TypedEmitter.removeAllListeners
sessionClosed()
sessionClosed(
session):void
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:532
Deregister a session that has disconnected.
Removes the session from the connected and playing sets, emitting viewer:removed if it was playing. When no sessions remain, the sink detaches from the relay so the upstream can go idle.
Parameters
session
RtspSession
The session that closed.
Returns
void
Example
server.sessionClosed(session);Implementation of
RtspSessionHost.sessionClosed
sessionPlaying()
sessionPlaying(
session):void
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:513
Register a session as actively playing.
Tracks the session for fan-out and emits a viewer:added event with the new viewer count.
Parameters
session
RtspSession
The session that just entered the playing state.
Returns
void
Example
server.sessionPlaying(session);Implementation of
RtspSessionHost.sessionPlaying
shutdown()
shutdown():
Promise<void>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:452
Fully tear the server down.
Closes every connected viewer, stops the TCP listener, and detaches from the relay so the upstream can go idle. Safe to call even if the server was never started.
Returns
Promise<void>
A promise that resolves once the listener is closed and the relay is detached.
Example
await server.shutdown();write()
write(
packet):Promise<void>
Defined in: sinks/rtsp-server/rtsp-server-sink.ts:618
Packetize and fan out one media packet to all playing viewers.
Routes the packet to its track's muxer (which emits RTP via onRtp); packets for unknown tracks or without native data are dropped. Once the muxer for every track has produced its header, the deferred SDP is resolved.
Parameters
packet
The media packet to packetize and deliver.
Returns
Promise<void>
A promise that resolves once the packet has been written to its muxer.
Example
await server.write(packet);