Best practices
These recommendations help you ship a polished video experience with the Video SDK for Linux.
Camera access and selection
On Linux, the SDK captures from cameras exposed through V4L2. 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.
Headless and server deployments
Many Linux Video SDK apps run headless, for example a bot or recorder deployed to a cloud host.
- A headless 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.