HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/.codex/.tmp/plugins/plugins/zoom/skills/video-sdk/references/session-lifecycle.md
---
title: "Video SDK Session Lifecycle (Join, Stream, Render, Leave)"
---

# Video SDK Session Lifecycle (Join, Stream, Render, Leave)

Many “video not showing” and “audio not starting” threads are caused by calling APIs out of order.

## Canonical Order

1. Create client
2. `init`
3. `join`
4. Get stream (`getMediaStream`) after join
5. Start audio/video and render based on events
6. Leave session and cleanup

## Common Gotcha: `getMediaStream()` Timing

On Web, `client.getMediaStream()` is only valid after `join`.

## Rendering Is Event-Driven

Make sure you:

- listen for join/leave events
- listen for peer video state changes
- attach/detach video elements when peers start/stop video

## UI Toolkit Notes

If using UI Toolkit:

- let Toolkit manage most lifecycle/rendering
- when you need something “custom” (e.g., snapshot, screen-share detection), confirm whether Toolkit exposes that or whether you must use underlying SDK APIs