Binds an incoming live stream to the current session using a stream key ID obtained from the Zoom OpenAPI.
Prerequisites:
Before calling this method, create a stream ingestion via the Zoom OpenAPI:
POST https://api.zoom.us/v2/videosdk/stream_ingestions
Body: { "session_id": "your_session_id", "stream_name": "My Incoming Stream" }
Use the stream_id from the response as the streamId parameter.
After binding, configure your streaming software (OBS/vMix) with the stream_url and stream_key
from the OpenAPI response and start pushing video before calling startIncomingLiveStream.
The stream key ID (stream_id) obtained from the Zoom OpenAPI stream ingestion response.
A promise that resolves when the stream is successfully bound.
Gets the current status of the incoming live stream.
Whenever a stream is bound, calling this method always triggers an on-demand status refresh
from the server. Listen to the incoming-live-stream-status event for real-time push
notifications of status changes.
Check stream readiness before starting:
const status = incomingLiveStream.getIncomingLiveStreamStatus();
if (status.isRTMPConnected && !status.isStreamPushed) {
// Streaming software is connected — ready to start as a virtual participant
await incomingLiveStream.startIncomingLiveStream(streamId);
}
The current status of the incoming live stream:
isRTMPConnected: whether streaming software is connected to the Zoom RTMP endpointisStreamPushed: whether video is actively being pushed into the sessionstreamId: the currently bound stream key ID, or empty string if no stream is boundStarts the bound incoming live stream as a virtual participant in the session.
Prerequisites:
bindIncomingLiveStreamstream_url and stream_key and actively pushing videogetIncomingLiveStreamStatus() must return isRTMPConnected: true before calling this methodOnce started, the stream appears as a special virtual participant named "Incoming livestream" in the session.
Other participants can subscribe to this user's video/audio like any other participant.
The stream participant can be identified by checking participant.isRtmpUser === true.
The stream key ID (stream_id) of the bound stream to start.
A promise that resolves when the stream is successfully started as a virtual participant (i.e., isStreamPushed becomes true).
Stops the incoming live stream and removes it as a virtual participant from the session.
Prerequisites:
isRTMPConnected: true)After stopping, the virtual participant is removed from the session. Call unbindIncomingLiveStream
afterwards to fully release resources before leaving the session.
The stream key ID (stream_id) of the active stream to stop.
A promise that resolves when the stream virtual participant is successfully removed (i.e., isStreamPushed becomes false).
Unbinds the currently bound incoming live stream and releases its resources.
Prerequisites:
streamId must match the currently bound streamisStreamPushed: true), call stopIncomingLiveStream firstisRTMPConnected must be false) before this method is called.
Stop the stream in your software (OBS, vMix, etc.) and wait for the incoming-live-stream-status event
to confirm isRTMPConnected: false before calling unbind.The stream key ID (stream_id) of the currently bound stream.
A promise that resolves when the stream is successfully unbound.
The client for incoming live stream (RTMP ingest).
The Incoming LiveStream feature allows you to ingest external RTMP streams (such as from OBS, vMix, or other streaming software) into your Zoom Video SDK session as a special virtual participant. This enables scenarios where pre-recorded content or external live sources can be shared in the session.
Prerequisites
bindIncomingLiveStreamWorkflow
Step 1 — Create a Stream Ingestion via Zoom OpenAPI
The response contains:
stream_id— use as thestreamIdparameter in all SDK methodsstream_url— the RTMP server URL to configure in your streaming softwarestream_key— the stream key to configure in your streaming softwareStep 2 — Bind, Configure, and Start
Step 3 — Subscribe to the Stream
Once started, the stream appears as a virtual participant named "Incoming livestream". Subscribe to its video/audio via the
user-addedevent and the participant's video pipe.Step 4 — Cleanup
2.4.5