Setting the file. One moment.
Skill 126 · Zoom Meeting SDK Windows
Subchapter 126.5
concepts/custom-ui-vs-raw-data.mdMarkdown6 KBView on GitHub
Skill: Zoom Meeting SDK (Windows)
Category: Concepts : ,
There are two fundamentally different ways to build a custom meeting UI with the Zoom SDK. Both require Custom UI mode (ENABLE_CUSTOMIZED_UI_FLAG), but they differ in who renders the video.
The SDK renders video into your window using Direct3D. You control layout, the SDK controls pixels.
Your Win32 Window
-> SDK creates child HWND inside it
-> SDK renders video via D3D11 into child HWND
-> You call SetPos(RECT) to position video elementsSetPos)SetBkColor)CreateCustomizedUIMgr() / DestroyCustomizedUIMgr()ICustomizedUIMgr::CreateVideoContainer() / DestroyVideoContainer()ICustomizedVideoContainer::CreateVideoElement()IActiveVideoRenderElement::Start() / Stop()INormalVideoRenderElement::Subscribe(userId)IVideoRenderElement::SetPos(RECT) / Show() / Hide()You get raw YUV420 frames per participant and render them yourself. Maximum control.
SDK decodes video internally
-> IZoomSDKRendererDelegate::onRawDataFrameReceived(YUVRawDataI420*)
-> You get raw pixel data (Y, U, V planes)
-> You render with your own engine (D3D11, OpenGL, GDI, etc.)YUVRawDataI420*createRenderer() — creates a renderer for one participantIZoomSDKRenderer::setRawDataResolution() — set qualityIZoomSDKRenderer::subscribe(userId) — bind to participantIZoomSDKRendererDelegate::onRawDataFrameReceived(YUVRawDataI420*) — frame callbackIZoomSDKRendererDelegate::onRawDataStatusChanged(RawDataStatus) — status changesIMeetingRecordingController::StartRawRecording()StartRawRecording() before frames flowYou can combine both approaches in the same application:
Custom UI mode enabled
|
+-- ICustomizedVideoContainer for main meeting view
| (SDK renders, you layout)
|
+-- IZoomSDKRenderer for specific participants
(raw frames for recording, processing, pop-out windows)ENABLE_CUSTOMIZED_UI_FLAGICustomizedVideoContainer for the main viewcreateRenderer() + subscribe() for raw data on specific users| Feature | SDK-Rendered | Self-Rendered | Hybrid |
|---|---|---|---|
| Raw pixel access | No | Yes | Yes (selected users) |
| Custom filters/effects | No | Yes | Yes (selected users) |
| Multiple windows | No (regions in 1 container) | Yes | Yes |
| Rendering effort | Minimal | High | Medium |
| CPU usage | Low (SDK uses D3D) | Higher (unless GPU) | Medium |
| Code complexity | Low | High | Medium |
| Layout flexibility | RECT regions | Unlimited | Mix |
| Active speaker tracking | Built-in (VideoRenderElement_ACTIVE) | Manual | Mix |
| Screen share display | Built-in (ICustomizedShareRender) | Manual from raw data | Mix |
| Time to implement | Hours | Days | Hours + targeted raw data |
Use SDK-Rendered when:
Use Self-Rendered when:
Use Hybrid when:
See also: