jpskill.com
💬 コミュニケーション コミュニティ

meeting-sdk/linux

Zoom Meeting SDK for Linux - C++ headless meeting bots with raw audio/video access, transcription, recording, and AI integration for server-side automation

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o meeting-sdk-linux.zip https://jpskill.com/download/22687.zip && unzip -o meeting-sdk-linux.zip && rm meeting-sdk-linux.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/22687.zip -OutFile "$d\meeting-sdk-linux.zip"; Expand-Archive "$d\meeting-sdk-linux.zip" -DestinationPath $d -Force; ri "$d\meeting-sdk-linux.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して meeting-sdk-linux.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → meeting-sdk-linux フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
2

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Zoom Meeting SDK - Linux 開発

Zoom Meeting SDK を Linux で使用して、ヘッドレスなミーティングボットを構築するための専門的なガイダンスです。この SDK は、サーバーサイドでのミーティング参加、生のメディアキャプチャ、文字起こし、AI を活用したミーティング自動化を可能にします。

自動的に参加して記録するミーティングボットの構築方法

このスキルは、以下の要件がある場合に使用します。

  • 可視ボットが実際の Zoom ミーティングに参加する
  • ボットが自身で生のメディアを記録する
  • または、ボットが参加後に Zoom が管理するクラウドレコーディングワークフローをトリガーする

スキルチェーン:

  • プライマリ: meeting-sdk/linux
  • OBF/ZAK のルックアップ、スケジューリング、またはクラウドレコーディング設定のために zoom-rest-api を追加します
  • ミーティング後のクラウドレコーディングの取得が必要な場合は zoom-webhooks を追加します

最小限の生録画フロー:

JoinParam join_param;
join_param.userType = SDK_UT_WITHOUT_LOGIN;
auto& params = join_param.param.withoutloginuserJoin;
params.meetingNumber = meeting_number;
params.userName = "Recording Bot";
params.psw = meeting_password.c_str();
params.app_privilege_token = obf_token.c_str();

SDKError join_err = meeting_service->Join(join_param);
if (join_err != SDKERR_SUCCESS) {
    throw std::runtime_error("join_failed");
}

// In MEETING_STATUS_INMEETING callback:
auto* record_ctrl = meeting_service->GetMeetingRecordingController();
if (!record_ctrl) {
    throw std::runtime_error("recording_controller_unavailable");
}

if (record_ctrl->CanStartRawRecording() != SDKERR_SUCCESS) {
    throw std::runtime_error("raw_recording_not_permitted");
}

SDKError record_err = record_ctrl->StartRawRecording();
if (record_err != SDKERR_SUCCESS) {
    throw std::runtime_error("start_raw_recording_failed");
}

GetAudioRawdataHelper()->subscribe(new MyAudioDelegate());

ボットが PCM/YUV メディアを所有する必要がある場合や、AI パイプラインに直接フィードする必要がある場合は、生の録画を使用してください。 ミーティング後に Zoom が管理する MP4/M4A/文字起こしアセットが必要な場合は、クラウド録画 + Webhook を使用してください。

公式ドキュメント: https://developers.zoom.us/docs/meeting-sdk/linux/ API リファレンス: https://marketplacefront.zoom.us/sdk/meeting/linux/ サンプルリポジトリ (生録画): https://github.com/zoom/meetingsdk-linux-raw-recording-sample サンプルリポジトリ (ヘッドレス): https://github.com/zoom/meetingsdk-headless-linux-sample

クイックリンク

Meeting SDK Linux を初めてお使いの方はこちらのパスに従ってください:

  1. linux.md - 完全なワークフローを含むクイックスタートガイド
  2. concepts/high-level-scenarios.md - 本番環境のボットアーキテクチャ
  3. meeting-sdk-bot.md - リトライロジックを備えた堅牢なボット
  4. references/linux-reference.md - 依存関係、Docker、CMake

一般的なユースケース:

問題が発生していますか?

ボットのルーティングルール

ユーザーがZoom ミーティングに自動的に参加して記録するボットの構築を依頼した場合、meeting-sdk-bot.md から始めてください。

  • 可視参加者、参加フロー、および生録画制御にはMeeting SDK Linuxを使用します。
  • ボットが OBF/ZAK トークンの取得、ミーティングのスケジュール、またはアカウント側の録画設定の有効化を行う必要がある場合は、zoom-rest-apiをチェーンします。
  • ミーティング終了後に Zoom クラウド録画の取得が必要な場合は、zoom-webhooksをチェーンします。

SDK の概要

Zoom Meeting SDK for Linux は、ヘッドレスサーバー環境向けに最適化された C++ ライブラリです。

  • ヘッドレス操作: GUI 不要で、Docker/クラウドに最適です
  • 生データアクセス: YUV420 ビデオ、32kHz の PCM オーディオ
  • GLib イベントループ: コールバックのための非同期イベント処理
  • Docker 対応: CentOS/Ubuntu 用の事前設定済み Dockerfile
  • PulseAudio 統合: ヘッドレス環境向けの仮想オーディオデバイス

Video SDK との主な違い

機能 Meeting SDK (Linux) Video SDK
主な用途 既存のミーティングにボットとして参加 カスタムビデオセッションをホスト
可視性 可視参加者 セッション参加者
UI ヘッドレス (UI なし) オプションのカスタム UI
認証 JWT + 外部ミーティング用の OBF/ZAK JWT のみ
録画制御 StartRawRecording() が必要 直接生データアクセス
プラットフォーム Linux のみ Windows、macOS、iOS、Android

前提条件

システム要件

  • OS: Ubuntu 22+、CentOS 8/9、Oracle Linux 8
  • アーキテクチャ: x86_64
  • コンパイラ: C++11 サポート付きの gcc/g++
  • ビルドツール: cmake 3.16+

開発依存関係

# Ubuntu
apt-get install -y build-essential cmake \
    libx11-xcb1 libxcb-xfixes0 libxcb-shape0 libxcb-shm0 \
    libxcb-randr0 libxcb-image0 libxcb-keysyms1 libxcb-xtest0 \
    libglib2.0-dev libcurl4-openssl-dev pulseaudio

# CentOS
yum install -y cmake gcc gcc-c++ \
    libxcb-devel xcb-util-image xcb-util-keysyms \
    glib2-devel libcurl-devel pulseaudio

必要な認証情報

  1. Zoom Meeting SDK アプリ (クライアント ID とシークレット) → Marketplace で作成
  2. JWT トークン → クライアント ID/シークレットから生成
  3. 外部ミーティングの場合: OBF トークンまたは ZAK トークン → [REST API 経由で取得](../references/bot-au

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Zoom Meeting SDK - Linux Development

Expert guidance for building headless meeting bots with the Zoom Meeting SDK on Linux. This SDK enables server-side meeting participation, raw media capture, transcription, and AI-powered meeting automation.

How to Build a Meeting Bot That Automatically Joins and Records

Use this skill when the requirement is:

  • visible bot joins a real Zoom meeting
  • the bot records raw media itself
  • or the bot triggers a Zoom-managed cloud-recording workflow after join

Skill chain:

  • primary: meeting-sdk/linux
  • add zoom-rest-api for OBF/ZAK lookup, scheduling, or cloud-recording settings
  • add zoom-webhooks when post-meeting cloud recording retrieval is required

Minimal raw-recording flow:

JoinParam join_param;
join_param.userType = SDK_UT_WITHOUT_LOGIN;
auto& params = join_param.param.withoutloginuserJoin;
params.meetingNumber = meeting_number;
params.userName = "Recording Bot";
params.psw = meeting_password.c_str();
params.app_privilege_token = obf_token.c_str();

SDKError join_err = meeting_service->Join(join_param);
if (join_err != SDKERR_SUCCESS) {
    throw std::runtime_error("join_failed");
}

// In MEETING_STATUS_INMEETING callback:
auto* record_ctrl = meeting_service->GetMeetingRecordingController();
if (!record_ctrl) {
    throw std::runtime_error("recording_controller_unavailable");
}

if (record_ctrl->CanStartRawRecording() != SDKERR_SUCCESS) {
    throw std::runtime_error("raw_recording_not_permitted");
}

SDKError record_err = record_ctrl->StartRawRecording();
if (record_err != SDKERR_SUCCESS) {
    throw std::runtime_error("start_raw_recording_failed");
}

GetAudioRawdataHelper()->subscribe(new MyAudioDelegate());

Use raw recording when the bot must own PCM/YUV media or feed an AI pipeline directly.
Use cloud recording + webhooks when the requirement is Zoom-managed MP4/M4A/transcript assets after the meeting.

Official Documentation: https://developers.zoom.us/docs/meeting-sdk/linux/
API Reference: https://marketplacefront.zoom.us/sdk/meeting/linux/
Sample Repository (Raw Recording): https://github.com/zoom/meetingsdk-linux-raw-recording-sample
Sample Repository (Headless): https://github.com/zoom/meetingsdk-headless-linux-sample

Quick Links

New to Meeting SDK Linux? Follow this path:

  1. linux.md - Quick start guide with complete workflow
  2. concepts/high-level-scenarios.md - Production bot architectures
  3. meeting-sdk-bot.md - Resilient bot with retry logic
  4. references/linux-reference.md - Dependencies, Docker, CMake

Common Use Cases:

Having issues?

Routing Rule for Bots

If the user asks to build a bot that automatically joins a Zoom meeting and records it, start with meeting-sdk-bot.md.

  • Use Meeting SDK Linux for the visible participant, join flow, and raw recording control.
  • Chain zoom-rest-api when the bot must fetch OBF/ZAK tokens, schedule meetings, or enable account-side recording settings.
  • Chain zoom-webhooks when the requirement is Zoom cloud recording retrieval after meeting end.

SDK Overview

The Zoom Meeting SDK for Linux is a C++ library optimized for headless server environments:

  • Headless Operation: No GUI required, perfect for Docker/cloud
  • Raw Data Access: YUV420 video, PCM audio at 32kHz
  • GLib Event Loop: Async event handling for callbacks
  • Docker-Ready: Pre-configured Dockerfiles for CentOS/Ubuntu
  • PulseAudio Integration: Virtual audio devices for headless environments

Key Differences from Video SDK

Feature Meeting SDK (Linux) Video SDK
Primary Use Join existing meetings as bot Host custom video sessions
Visibility Visible participant Session participant
UI Headless (no UI) Optional custom UI
Authentication JWT + OBF/ZAK for external meetings JWT only
Recording Control StartRawRecording() required Direct raw data access
Platform Linux only Windows, macOS, iOS, Android

Prerequisites

System Requirements

  • OS: Ubuntu 22+, CentOS 8/9, Oracle Linux 8
  • Architecture: x86_64
  • Compiler: gcc/g++ with C++11 support
  • Build Tools: cmake 3.16+

Development Dependencies

# Ubuntu
apt-get install -y build-essential cmake \
    libx11-xcb1 libxcb-xfixes0 libxcb-shape0 libxcb-shm0 \
    libxcb-randr0 libxcb-image0 libxcb-keysyms1 libxcb-xtest0 \
    libglib2.0-dev libcurl4-openssl-dev pulseaudio

# CentOS
yum install -y cmake gcc gcc-c++ \
    libxcb-devel xcb-util-image xcb-util-keysyms \
    glib2-devel libcurl-devel pulseaudio

Required Credentials

  1. Zoom Meeting SDK App (Client ID & Secret) → Create at Marketplace
  2. JWT Token → Generate from Client ID/Secret
  3. For External Meetings: OBF token OR ZAK token → Get via REST API
  4. For Raw Recording: Meeting Recording Token (optional) → Get via API

Quick Start

1. Download & Extract SDK

# Download from https://marketplace.zoom.us/
tar xzf zoom-meeting-sdk-linux_x86_64-{version}.tar

# Organize files
mkdir -p demo/include/h demo/lib/zoom_meeting_sdk
cp -r h/* demo/include/h/
cp lib*.so demo/lib/zoom_meeting_sdk/
cp -r qt_libs demo/lib/zoom_meeting_sdk/
cp translation.json demo/lib/zoom_meeting_sdk/json/

# Create required symlink
cd demo/lib/zoom_meeting_sdk && ln -s libmeetingsdk.so libmeetingsdk.so.1

2. Initialize & Auth

#include "zoom_sdk.h"

USING_ZOOM_SDK_NAMESPACE

// Initialize SDK
InitParam init_params;
init_params.strWebDomain = "https://zoom.us";
init_params.enableLogByDefault = true;
init_params.rawdataOpts.audioRawDataMemoryMode = ZoomSDKRawDataMemoryModeHeap;
InitSDK(init_params);

// Authenticate with JWT
AuthContext auth_ctx;
auth_ctx.jwt_token = your_jwt_token;
CreateAuthService(&auth_service);
auth_service->SDKAuth(auth_ctx);

3. Join Meeting

// In onAuthenticationReturn callback
void onAuthenticationReturn(AuthResult ret) {
    if (ret == AUTHRET_SUCCESS) {
        JoinParam join_param;
        join_param.userType = SDK_UT_WITHOUT_LOGIN;

        auto& params = join_param.param.withoutloginuserJoin;
        params.meetingNumber = 1234567890;
        params.userName = "Bot";
        params.psw = "password";
        params.isVideoOff = true;
        params.isAudioOff = false;

        meeting_service->Join(join_param);
    }
}

4. Access Raw Data

// In onMeetingStatusChanged callback
void onMeetingStatusChanged(MeetingStatus status, int iResult) {
    if (status == MEETING_STATUS_INMEETING) {
        auto* record_ctrl = meeting_service->GetMeetingRecordingController();

        // Start raw recording (enables raw data access)
        if (record_ctrl->CanStartRawRecording() == SDKERR_SUCCESS) {
            record_ctrl->StartRawRecording();

            // Subscribe to audio
            auto* audio_helper = GetAudioRawdataHelper();
            audio_helper->subscribe(new MyAudioDelegate());

            // Subscribe to video
            IZoomSDKRenderer* video_renderer;
            createRenderer(&video_renderer, new MyVideoDelegate());
            video_renderer->setRawDataResolution(ZoomSDKResolution_720P);
            video_renderer->subscribe(user_id, RAW_DATA_TYPE_VIDEO);
        }
    }
}

Key Features

Feature Description
Headless Operation No GUI, perfect for Docker/server deployments
Raw Audio (PCM) Capture mixed or per-user audio at 32kHz
Raw Video (YUV420) Capture video frames in contiguous planar format
GLib Event Loop Async callback handling
Docker Support Pre-built Dockerfiles for CentOS/Ubuntu
PulseAudio Virtual Devices Audio in headless environments
Breakout Rooms Programmatic breakout room management
Chat Send/receive in-meeting chat
Recording Control Local, cloud, and raw recording

Critical Gotchas & Best Practices

⚠️ CRITICAL: PulseAudio for Docker/Headless

The #1 issue for raw audio in Docker:

Raw audio requires PulseAudio and a config file, even in headless environments.

Solution:

# Install PulseAudio
apt-get install -y pulseaudio pulseaudio-utils

# Create config file
mkdir -p ~/.config
cat > ~/.config/zoomus.conf << EOF
[General]
system.audio.type=default
EOF

# Start PulseAudio with virtual devices
pulseaudio --start --exit-idle-time=-1
pactl load-module module-null-sink sink_name=virtual_speaker
pactl load-module module-null-sink sink_name=virtual_mic

See: references/linux-reference.md#pulseaudio-setup

Raw Recording Permission Required

Unlike Video SDK, Meeting SDK requires explicit permission to access raw data:

// MUST call StartRawRecording() first
auto* record_ctrl = meeting_service->GetMeetingRecordingController();

SDKError can_record = record_ctrl->CanStartRawRecording();
if (can_record == SDKERR_SUCCESS) {
    record_ctrl->StartRawRecording();
    // NOW you can subscribe to audio/video
} else {
    // Need: host/co-host status OR recording token
}

Ways to get permission:

  1. Bot is host/co-host
  2. Host grants recording permission
  3. Use recording_token parameter (get via REST API)
  4. Use app_privilege_token (OBF) when joining

GLib Main Loop Required

SDK callbacks execute via GLib event loop:

#include <glib.h>

// Setup main loop
GMainLoop* loop = g_main_loop_new(NULL, FALSE);

// Add timeout for periodic tasks
g_timeout_add_seconds(10, check_meeting_status, NULL);

// Run loop (blocks until quit)
g_main_loop_run(loop);

Without GLib loop: Callbacks never fire, join hangs indefinitely.

Heap Memory Mode Recommended

Always use heap mode for raw data to avoid stack overflow with large frames:

init_params.rawdataOpts.videoRawDataMemoryMode = ZoomSDKRawDataMemoryModeHeap;
init_params.rawdataOpts.shareRawDataMemoryMode = ZoomSDKRawDataMemoryModeHeap;
init_params.rawdataOpts.audioRawDataMemoryMode = ZoomSDKRawDataMemoryModeHeap;

Thread Safety

SDK callbacks execute on SDK threads:

  • Don't perform heavy operations in callbacks
  • Don't call CleanUPSDK() from within callbacks
  • Use thread-safe queues for data passing
  • Use mutexes for shared state

Production Architectures

Transcription Bot

See: concepts/high-level-scenarios.md#scenario-1

Join Meeting → StartRawRecording → Subscribe Audio → 
Stream to AssemblyAI/Whisper → Generate Real-time Transcript

Recording Bot

See: concepts/high-level-scenarios.md#scenario-2

Join Meeting → StartRawRecording → Subscribe Audio+Video → 
Write YUV+PCM → FFmpeg Merge → Upload to Storage

AI Meeting Assistant

See: concepts/high-level-scenarios.md#scenario-3

Join Meeting → Real-time Transcription → AI Analysis → 
Extract Action Items → Generate Summary

Sample Applications

Official Repositories:

Sample Description Link
Raw Recording Sample Traditional C++ approach with config.txt GitHub
Headless Sample Modern TOML-based with CLI, Docker Compose GitHub

What Each Demonstrates:

  • Raw Recording Sample: Complete raw data workflow, PulseAudio setup, Docker multi-distro support
  • Headless Sample: AssemblyAI integration, Anthropic AI, production-ready config management

Documentation Library

Core Concepts

Platform Reference

Authentication

Advanced Features

Common Issues

Issue Cause Solution
No audio in Docker Missing PulseAudio config Create ~/.config/zoomus.conf
Raw recording denied No permission Use host/co-host OR recording token
Callbacks not firing Missing GLib main loop Add g_main_loop_run()
Build errors (XCB) Missing X11 libraries Install libxcb packages
Segfault on auth OpenSSL version mismatch Install libssl1.1

Complete troubleshooting: references/linux-reference.md#troubleshooting

Resources


Need help? Start with linux.md for quick start, then explore high-level-scenarios.md for production patterns.

Operations

  • RUNBOOK.md - 5-minute preflight and debugging checklist.

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。