Skip to content

@mega-yfue/eufy-sdk / LiveConsumer

Interface: LiveConsumer ​

A single consumer of a SharedLiveSource. A LiveStreamConsumer (so live() can hand it back directly), plus the listener removal and arrival-timed feed the recording and readable egresses use.

Extends ​

Properties ​

awaitingKeyframe ​

ts
readonly awaitingKeyframe: boolean;

True while this consumer is dropping frames after crossing its bound, waiting for the next IDR.

Inherited from ​

LiveStreamConsumer.awaitingKeyframe

Methods ​

detach() ​

ts
detach(): void;

Leave the source (refcount--). Idempotent. stop() is an alias (LiveStreamHandle).

Returns ​

void


nudge()? ​

ts
nudge?(force?): void;

Re-issue the media-start command (start-race retry / keepalive nudge). Optional.

force states that the channel is NOT being served, so a real start is required rather than a keepalive. An own-session camera sends one or the other depending on whether its session believes the channel is already started — a belief that outlives a station which acknowledged a start and then served nothing.

Parameters ​

force? ​

boolean

Returns ​

void

Inherited from ​

LiveStreamConsumer.nudge


off() ​

Call Signature ​

ts
off(event, listener): this;

Detach a previously registered listener (mirrors LiveStreamHandle.on).

Parameters ​
event ​

"video"

listener ​

(frame) => void

Returns ​

this

Call Signature ​

ts
off(event, listener): this;
Parameters ​
event ​

"audio"

listener ​

(frame) => void

Returns ​

this

Call Signature ​

ts
off(event, listener): this;
Parameters ​
event ​

"start" | "stop"

listener ​

() => void

Returns ​

this

Call Signature ​

ts
off(event, listener): this;
Parameters ​
event ​

"error"

listener ​

(err) => void

Returns ​

this


on() ​

Call Signature ​

ts
on(event, listener): this;

The coded configuration of the video that follows, announced immediately before the first frame carrying it and again whenever it changes.

A camera reconfigures its source repeatedly within one session, and an encoder opened for one geometry cannot accept a frame of another — so a consumer adapting this source to a fixed output has to rebuild on every change. Fires once per change rather than per frame, beginning with the first frame this consumer receives, so a consumer holding media it has not been told the configuration of is not a state it can reach.

Per consumer, against what this consumer was last given: a mid-session join begins at its next live keyframe, and a consumer crossing its queue bound resynchronises onto a later IDR. Each receives the configuration of the media it is delivered, even when another consumer has already seen it.

Only a consumer announces this, never a bare LiveStreamHandle: it is read from the parameter sets a shared source watches every frame for, which the raw pull underneath it does not do. That is also why the inherited events are restated here — a subtype may add an overload only by declaring the whole set.

Parameters ​
event ​

"video-config"

listener ​

(config) => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

One whole video access unit — see LiveVideoFrame.

Parameters ​
event ​

"video"

listener ​

(frame) => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

One audio access unit, in the codec the station declared for it.

Parameters ​
event ​

"audio"

listener ​

(frame) => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

Battery-budget elapsed — extend to keep streaming or let it auto-stop (battery cameras only).

Parameters ​
event ​

"start" | "stop"

listener ​

() => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

Why this consumer's stream is over, including a warm-up that never produced a keyframe.

Parameters ​
event ​

"error"

listener ​

(err) => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

Battery-budget elapsed — extend to keep streaming or let it auto-stop (battery cameras only).

Parameters ​
event ​

"budget"

listener ​

(notice) => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on

Call Signature ​

ts
on(event, listener): this;

A media start was repeated to its acknowledgement deadline and abandoned.

The start is repeated byte-identically, so an abandonment is many sends with no reply — the device was never told to stream, and a warm-up waiting on it can only time out. Distinct from error: the transport is intact and the session is simply not being heard.

Parameters ​
event ​

"unacknowledged"

listener ​

() => void

Returns ​

this

Inherited from ​

LiveStreamConsumer.on


onMedia() ​

ts
onMedia(listener): this;

Subscribe to frames carrying the source-captured arrival time used by the prebuffer.

Parameters ​

listener ​

(item) => void

Returns ​

this


pause() ​

ts
pause(): void;

Hold delivery — frames queue against the bound until resume.

Returns ​

void

Inherited from ​

LiveStreamConsumer.pause


resume() ​

ts
resume(): void;

Release delivery and hand over the queued backlog, stopping if the sink pauses again mid-drain.

Returns ​

void

Inherited from ​

LiveStreamConsumer.resume


start() ​

ts
start(): this;

Returns ​

this

Inherited from ​

LiveStreamConsumer.start


stop() ​

ts
stop(): void;

Returns ​

void

Inherited from ​

LiveStreamConsumer.stop

Independent and unofficial. Not affiliated with, endorsed by, or sponsored by Anker Innovations, Anker eufy, or eufy. "Anker eufy", "eufy" and "Anker" are trademarks of their respective owners. Use responsibly — rapid or failed logins can trigger captcha or temporary cooldowns.