File: C:/Users/fred/.codex/.tmp/plugins/plugins/zoom/skills/video-sdk/windows/references/samples.md
# Official Sample Applications
Reference guide for Zoom Video SDK Windows sample applications.
**Official Repository**: https://github.com/zoom/videosdk-windows-rawdata-sample
---
## Sample Overview
| Sample | Description | Key Features |
|--------|-------------|--------------|
| **VSDK_SkeletonDemo** | Minimal session join | Simplest starting point |
| **VSDK_getRawVideo** | Capture raw video | YUV420 frame extraction |
| **VSDK_getRawAudio** | Capture raw audio | PCM audio extraction |
| **VSDK_getRawShare** | Capture screen share | Share content capture |
| **VSDK_sendRawVideo** | Send custom video | Virtual camera injection |
| **VSDK_sendRawAudio** | Send custom audio | Virtual microphone injection |
| **VSDK_sendRawShare** | Send custom share | Custom screen share source |
| **VSDK_CloudRecording** | Cloud recording | Start/stop cloud recording |
| **VSDK_CommandChannel** | Custom messaging | Send/receive custom commands |
| **VSDK_CallIn** | PSTN dial-in | Phone dial-in support |
| **VSDK_Callout** | PSTN dial-out | Phone dial-out support |
| **VSDK_ServiceQuality** | Network statistics | Quality monitoring |
| **VSDK_TranscriptionAndTranslation** | Live transcription | Real-time captions |
| **VSDK_MultiStreamVideo** | Multiple video streams | Multi-camera support |
| **VSDK_PreviewCameraAndMicrophone** | Device preview | Pre-join device testing |
| **VSDK_Share2ndCameraAsMultiCam** | Secondary camera | Multi-camera sharing |
| **VSDK_Share2ndCameraAsShareScreenDemo** | Camera as share | Camera content sharing |
| **VSDK_ShareScreenPreprocessorDemo** | Share preprocessing | Custom share processing |
| **VSDK_RTMSDemo** | Real-time messaging | RTMS integration |
| **VSDK_DuilibDemo2** | Full UI demo | Complete GUI application |
---
## Recommended Learning Path
### 1. Start Here: VSDK_SkeletonDemo
Minimal code to join a session. Demonstrates:
- SDK initialization
- JWT authentication
- Session join/leave
- Windows message loop
- Basic delegate implementation
**Key patterns to learn:**
```cpp
// 1. Create SDK
IZoomVideoSDK* sdk = CreateZoomVideoSDKObj();
// 2. Initialize
ZoomVideoSDKInitParams params;
params.domain = L"https://zoom.us";
sdk->initialize(params);
// 3. Add delegate
sdk->addListener(myDelegate);
// 4. Join session
ZoomVideoSDKSessionContext ctx;
ctx.sessionName = L"session";
ctx.token = L"jwt";
ctx.audioOption.connect = false;
sdk->joinSession(ctx);
// 5. Message loop (CRITICAL)
while (running) {
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Sleep(10);
}
```
### 2. Video Capture: VSDK_getRawVideo
Capture raw YUV420 video frames. Demonstrates:
- `IZoomVideoSDKRawDataPipeDelegate` implementation
- `onRawDataFrameReceived()` callback
- YUV buffer extraction (Y, U, V planes)
- Resolution and rotation handling
**Key patterns:**
```cpp
class VideoCapture : public IZoomVideoSDKRawDataPipeDelegate {
void onRawDataFrameReceived(YUVRawDataI420* data) override {
int width = data->GetStreamWidth();
int height = data->GetStreamHeight();
char* yBuffer = data->GetYBuffer();
char* uBuffer = data->GetUBuffer();
char* vBuffer = data->GetVBuffer();
// Process frames...
}
};
// Subscribe
IZoomVideoSDKRawDataPipe* pipe = user->GetVideoPipe();
pipe->subscribe(ZoomVideoSDKResolution_720P, videoCapture);
```
### 3. Audio Capture: VSDK_getRawAudio
Capture raw PCM audio. Demonstrates:
- Mixed audio (all participants)
- Per-user audio separation
- Audio format (sample rate, channels)
**Key patterns:**
```cpp
void onMixedAudioRawDataReceived(AudioRawData* data) override {
char* buffer = data->GetBuffer();
int length = data->GetBufferLen();
int sampleRate = data->GetSampleRate(); // 32000 Hz
int channels = data->GetChannelNum(); // 1 or 2
// Process PCM audio...
}
```
### 4. Video Injection: VSDK_sendRawVideo
Send custom video as virtual camera. Demonstrates:
- `IZoomVideoSDKVideoSource` implementation
- Frame sending with `sendVideoFrame()`
- YUV frame creation
- Frame rate control
### 5. Audio Injection: VSDK_sendRawAudio
Send custom audio as virtual microphone. Demonstrates:
- `IZoomVideoSDKVirtualAudioMic` implementation
- PCM audio sending
- Sample rate matching
---
## Sample Categories
### Raw Data Capture
| Sample | Input | Output |
|--------|-------|--------|
| VSDK_getRawVideo | Remote video | YUV420 frames |
| VSDK_getRawAudio | Session audio | PCM samples |
| VSDK_getRawShare | Screen share | YUV420 frames |
### Raw Data Injection
| Sample | Input | Output |
|--------|-------|--------|
| VSDK_sendRawVideo | YUV420 frames | Virtual camera |
| VSDK_sendRawAudio | PCM samples | Virtual mic |
| VSDK_sendRawShare | YUV420 frames | Screen share |
### Communication
| Sample | Feature |
|--------|---------|
| VSDK_CommandChannel | Custom command messaging (60 msgs/sec) |
| VSDK_CallIn | PSTN phone dial-in |
| VSDK_Callout | PSTN phone dial-out |
### Recording & Streaming
| Sample | Feature |
|--------|---------|
| VSDK_CloudRecording | Zoom cloud recording |
| VSDK_RTMSDemo | Real-time messaging service |
### Advanced Features
| Sample | Feature |
|--------|---------|
| VSDK_ServiceQuality | Network quality statistics |
| VSDK_TranscriptionAndTranslation | Live captions |
| VSDK_MultiStreamVideo | Multiple video streams |
| VSDK_PreviewCameraAndMicrophone | Device preview before join |
| VSDK_ShareScreenPreprocessorDemo | Custom share processing |
---
## Common Patterns Across Samples
### 1. Initialization Pattern
All samples follow this pattern:
```cpp
// Initialize SDK
IZoomVideoSDK* sdk = CreateZoomVideoSDKObj();
ZoomVideoSDKInitParams params;
params.domain = L"https://zoom.us";
params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;
sdk->initialize(params);
```
### 2. Delegate Registration
Always register before joining:
```cpp
sdk->addListener(new MyDelegate());
sdk->joinSession(context);
```
### 3. Audio Connection
Connect audio in callback, not during join:
```cpp
context.audioOption.connect = false; // Join config
void onSessionJoin() override {
sdk->getAudioHelper()->startAudio(); // Connect here
}
```
### 4. Message Loop
All samples include message loop:
```cpp
while (!g_exit) {
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Sleep(10);
}
```
---
## Building Samples
### Prerequisites
1. Visual Studio 2019 or 2022
2. Windows SDK 10.0.19041.0+
3. Zoom Video SDK (download from Marketplace)
### Build Steps
1. Open solution file (`.sln`)
2. Set platform to x64
3. Set configuration to Release
4. Build solution (Ctrl+Shift+B)
5. Copy SDK DLLs to output directory
### Configuration
Each sample uses `config.json`:
```json
{
"jwt": "your-jwt-token",
"session_name": "test-session",
"password": "",
"user_name": "Bot"
}
```
---
## Related Documentation
- [SDK Architecture Pattern](../concepts/sdk-architecture-pattern.md) - Universal patterns
- [Session Join Pattern](../examples/session-join-pattern.md) - Complete join code
- [Raw Video Capture](../examples/raw-video-capture.md) - YUV capture details
- [API Reference](windows-reference.md) - Method signatures
- [Delegate Methods](delegate-methods.md) - All callbacks
---
## External Resources
- **GitHub Repository**: https://github.com/zoom/videosdk-windows-rawdata-sample
- **Official Documentation**: https://developers.zoom.us/docs/video-sdk/windows/
- **API Reference**: https://marketplacefront.zoom.us/sdk/custom/windows/
- **Developer Forum**: https://devforum.zoom.us/
---
**Recommendation**: Start with `VSDK_SkeletonDemo` to understand the basic flow, then move to `VSDK_getRawVideo` or `VSDK_getRawAudio` based on your needs.