Engineering
Glossvation Engineering
Web・モバイル

Agora SDK でリアルタイム通信を組む — WebRTC 代替としての実務選択

Agora SDK (ビデオ / 音声 / チャット) の基本機能、WebRTC スクラッチ実装・Twilio・Daily.co・LiveKit との比較、品質 (QoS) やセキュリティ設計、日本向けの注意点。

Glossvation ·

Agora が解く問題

リアルタイムのビデオ・音声通話をアプリに組み込みたいとき、選択肢は大きく 3 つあります。

方式メリットデメリット
WebRTC 自前実装完全コントロール、ベンダーロックなしTURN / STUN / シグナリング / SFU を自前で、運用重い
マネージド RTC (Agora / Twilio / Daily / LiveKit)数日で統合完了、品質も高い従量課金、ベンダー依存
ビデオ会議 SaaS (Zoom SDK / Jitsi)既存プロダクト相当のフル機能カスタマイズ性低、UI 強制

Agora は中国発のマネージド RTC で、世界展開のあるリアルタイム通信プラットフォームです。 200+ データセンターのグローバル配信、低レイテンシ、Android / iOS / Web / Unity / Flutter 対応。

主な機能

ビデオ / 音声通話

  • 1:1 から 1 万人のブロードキャストまでスケール
  • ビデオコーデック (H.264 / VP8 / AV1)、オーディオコーデック (Opus 等)
  • 画面共有、カメラ切替、背景ぼかし、仮想背景

リアルタイム・メッセージング (RTM)

  • テキストチャット、プレゼンス (オンライン状態)
  • ビデオ通話と同時にチャット併用

録画・AI 文字起こし

  • クラウド録画 (S3/GCS に自動保存)
  • 音声自動文字起こし (多言語対応)

最小実装 (Web)

import AgoraRTC from "agora-rtc-sdk-ng";

const client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });

async function joinCall(appId, token, channel, uid) {
  await client.join(appId, channel, token, uid);

  // ローカル音声/映像の取得
  const localTracks = await AgoraRTC.createMicrophoneAndCameraTracks();
  await client.publish(localTracks);

  // リモート参加者を購読
  client.on("user-published", async (user, mediaType) => {
    await client.subscribe(user, mediaType);
    if (mediaType === "video") {
      user.videoTrack.play(`remote-${user.uid}`);
    } else if (mediaType === "audio") {
      user.audioTrack.play();
    }
  });
}

Android (Java) 版は Agora のドキュメントが充実しているので、まずは公式サンプルをベースに開発がおすすめ。

他サービスとの比較 (2024+)

AgoraTwilio VideoDaily.coLiveKit
発祥中国米国米国米国 (OSS)
料金 (分課金)$0.99 / 1000 分$0.004 / 分$0.001-0.004 / 分$0 (自前) / $0.0012 / 分 (Cloud)
中国国内の到達性◎△△△
オープンソース無無無あり (Apache2)
エコシステムSDK 充実米国で人気モダン開発者向け急成長中
日本サポート可可英語ベース英語ベース

選び方:

  • 中国市場を意識 or グローバル低レイテンシ重視 → Agora
  • OSS 自前運用で柔軟 → LiveKit (自ホスト) か LiveKit Cloud
  • 既に Twilio 使用 → Twilio Video (統合容易)
  • モダン Web 開発中心 → Daily.co

セキュリティ設計

1. トークン認証

本番では App ID 直接公開は NG。サーバー側で短期トークンを発行する:

// Node.js サーバー側
const { RtcTokenBuilder, RtcRole } = require("agora-token");

function issueToken(channelName, uid) {
  return RtcTokenBuilder.buildTokenWithUid(
    APP_ID, APP_CERT, channelName, uid,
    RtcRole.PUBLISHER,
    Math.floor(Date.now() / 1000) + 3600  // 1 時間有効
  );
}

2. チャンネル名のサーバー発行

ユーザーが任意のチャンネル名で入れると、他者の通話に乗り込める。サーバーで UUID 発行 + DB 記録。

3. 会議録画の同意取得

日本の法令 (個人情報保護法) に従い、録画開始前に全参加者の同意表示を UI 実装。

品質 (QoS) 設計

ビットレート自動調整

const localVideo = await AgoraRTC.createCameraVideoTrack({
  encoderConfig: {
    width: 1280,
    height: 720,
    frameRate: 30,
    bitrateMin: 300,
    bitrateMax: 1500,
  },
});

ネットワーク状況に応じて自動調整される。モバイル対応は bitrateMin を 200kbps 程度に下げる。

ネットワーク品質監視

client.on("network-quality", (stats) => {
  // stats.uplinkNetworkQuality / downlinkNetworkQuality (0-6)
  if (stats.uplinkNetworkQuality > 3) {
    showWarning("ネットワークが不安定です");
  }
});

Simulcast (多解像度同時配信)

1 送信者が複数解像度を同時送信し、受信者が最適なものを選択。多人数会議で帯域効率化。

日本向けの注意点

1. データセンターリージョン

Agora は東京に DC を持つが、特定チャンネルがどの DC を使うかはサーバー側制御。レイテンシ測定で確認。

2. 中国国内アクセス

ある意味 Agora の強み。他サービスは中国 GFW で遮断されがちだが Agora は国内 CDN を持つ。日本発の中国向けアプリに強い。

3. 商用利用ライセンス

無料プラン (10000 分 / 月) は個人・開発用途。商用は Pay-as-you-go または Enterprise プランで契約。

落とし穴

1. ユーザー数と同時 Publisher 数の混同

課金は「1 分あたりの Publisher (発信者) 数」。10 人ミーティング = 10 Publisher × 60 分 = 600 分 の課金。 視聴のみは安い。

2. iOS カメラ権限

ビルド時に Info.plist に NSCameraUsageDescription / NSMicrophoneUsageDescription を書き忘れるとアプリ起動時にクラッシュ。

3. Agora SDK のバージョン管理

Android は AAR のバージョン固定、iOS は CocoaPods / SPM で管理。メジャーバージョン上げる際は破壊的変更を要チェック。

4. 録画後のストレージコスト

録画は長時間動画で肥大化。GCS / S3 のライフサイクルポリシーで古いものを自動削除。

まとめ

  • Agora は グローバル (特に中国) 対応の低レイテンシ RTC の有力選択肢
  • トークン認証・チャンネル UUID 化・同意取得で本番セキュリティを確保
  • 競合 (LiveKit / Twilio / Daily) との比較で、料金・OSS・地理対応で選ぶ
  • 録画・QoS・Simulcast は使用前に料金・ストレージ影響を見積もる

関連記事