# 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 `getNumberOfCameras` before calling `startVideo`. - Let the user choose a camera, or select a known device by ID. For details, see [Camera controls](/docs/video-sdk/windows/video/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 `onUserJoin` and `onUserLeave`. For details, see [Receive raw data](/docs/video-sdk/windows/raw-data/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`](/docs/video-sdk/windows/video/video-events/#user-video-status) 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 `startVideo` against hardware. For details, see [Send raw data](/docs/video-sdk/windows/raw-data/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](/docs/video-sdk/windows/video/video-quality/).