Best practices
These recommendations help you ship a polished video experience with the Video SDK for Windows.
Camera access and selection
On Windows, the SDK captures from the standard Windows camera devices through DirectShow and Media Foundation. On machines with more than one camera, don't assume the default is correct.
- Confirm at least one camera is present with
getNumberOfCamerasbefore callingstartVideo. - Let the user choose a camera, or select a known device by ID. For details, see Camera controls.
Manage subscriptions for rendering
You render remote video by subscribing to each user's raw video pipe. On a busy session, subscriptions are the main driver of CPU and bandwidth cost.
- Subscribe only to the users you are actually displaying. Unsubscribe from a user's pipe as soon as their tile leaves the screen.
- Match the subscription resolution to the size you render at. Subscribing at a higher resolution than you display wastes decode time.
- Add and remove subscriptions in response to
onUserJoinandonUserLeave. For details, see Receive raw data.
Show video status in your UI
Render each user's video on/off state from their ZoomVideoSDKVideoStatus, and update it when onUserVideoStatusChanged fires, so participants can tell who has their camera on.
Server and headless deployments
Some Windows Video SDK apps run without a user present, for example a bot or recorder deployed to a Windows Server host.
- A server host usually has no physical camera. To send video without a camera, provide a custom video source rather than calling
startVideoagainst hardware. For details, see Send raw data. - To process or record remote video, subscribe to each user's raw video pipe and handle the YUV frames directly rather than rendering to a display.
Manage quality under limited bandwidth
When bandwidth is constrained, set a video quality preference so the SDK trades resolution against frame rate in the way that suits your content. For details, see Manage video quality.