1. Cloudflare / Cloudflare Stream とは
Cloudflare はグローバルCDNとセキュリティ基盤を提供。
Cloudflare Stream は、アップロード→保存→自動エンコード→配信を1つのAPIで提供する動画基盤です。料金は「保存(minutes stored)+配信(minutes delivered)」のみとシンプルで、エンコード費用や帯域追加課金はなし。(Cloudflare Docs, Cloudflare)
2. APIトークンの取得方法
- ダッシュボードへログイン → My Profile → API Tokens → Create Token。
-
Create Custom Token を選び、Permissions に
Account → Stream → Edit(用途に応じて Read/Write)を付与。 - Accounts で対象アカウントを指定 → Create Token。
- 表示された APIトークンを安全に保管(.env など)。
公式のAPIガイドでも「API Tokens から作成」が基本動線です。(Cloudflare Docs)
例:Direct Upload URL を発行(Basic / 200MB未満)
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/stream/direct_upload" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"maxDurationSeconds":600}'
“エンドユーザー直アップロード”用のワンタイムURLをサーバー側で発行して渡します。200MB未満はBasic、200MB超はtus推奨が公式の推奨方針です。(Cloudflare Docs)
3. 料金体系(2025年9月時点)
- 保存(Minutes Stored):$5 / 1,000分、前払い(プリペイド)。ファイルサイズは不問。残高はダッシュボードで確認できます。(Cloudflare Docs)
- 配信(Minutes Delivered):$1 / 1,000分、後払い(従量)。VOD再生・HLS/DASH・MP4ダウンロード・ライブ配信などが対象。ダッシュボードの Billable Usage / Stream Analytics で確認可能。(Cloudflare Docs)
- Stream Live も同一課金(録画=保存、視聴=配信、エンコード追加費用なし)。(Cloudflare Docs)
- Pro/Businessプランには無料枠の案内(例:保存100分+配信10,000分)があります。最新のプラン表記を確認してください。(Cloudflare)
例:10分動画×100回再生 → 配信1,000分 = $1。保存は10分×本数で消費(1,000分枠=$5)。合計は使用状況により概ね $1〜数ドルに収まります。
4. 支払い設定(Billing / Payment)
- 決済手段の登録:ダッシュボード → Billing → Payment → Manage から クレジットカード / PayPal を追加。バックアップ決済手段も登録可。(Cloudflare Docs)
- 請求先/税情報(VAT/GST):Billing ページで更新。請求メールや住所変更も同ページ。(Cloudflare Docs)
- 支払い失敗の再決済:Invoices & documents で Pay Now。(Cloudflare Docs)
- 使用量の可視化:Billing → Usage(Usage based billing の説明も参照)。(Cloudflare Docs)
5. Cloudflare Stream の主なAPI
5.1 アップロード
-
Direct Creator Uploads(Basic/200MB未満 or tus)
エンドユーザー直アップロードのためのURLを発行。200MB未満はBasic、200MB超や再開可否が必要ならtus。(Cloudflare Docs) -
tus(レジューム)
POST /accounts/{account_id}/stream(Tus-Resumable)→ 201 + Location で以後PATCH。(Cloudflare Docs) -
Link Upload(URL取り込み)
POST /accounts/{account_id}/stream/copyで外部URL(例:S3)から直接取り込み。(Cloudflare Docs)
5.2 管理
-
一覧/詳細/削除:
GET /accounts/{account_id}/stream(最大1000件)、GET/DELETE /stream/{video_uid}。(Cloudflare Docs)
5.3 再生
-
Stream Player(iframe):
https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/iframeを埋め込み。(Cloudflare Docs) - 自前プレイヤー:HLS/DASH マニフェストURLはダッシュボード/APIで取得。(Cloudflare Docs)
5.4 セキュリティ
-
Signed URL / Tokens:動画に
requireSignedURLs: trueを設定し、POST /stream/{identifier}/tokenで署名トークン発行。公開リンクは無効化され、署名URL必須に。(Cloudflare Docs) - Allowed Origins:HLS/DASHの取得元ドメインを制限(自前プレイヤーでも有効)。(Cloudflare Docs)
-
Live の場合:
allowedOrigins/requireSignedURLsはライブ入力に紐づく設定が録画にも既定として適用。(Cloudflare Docs)
5.5 字幕・サムネ・ダウンロード・透かし
- Captions(字幕):BCP47言語ごとに VTT を PUT/AI生成APIもあり。(Cloudflare Docs)
-
サムネ(thumbnails):
.../thumbnails/thumbnail.jpg?time=1s&height=270など URLで即生成。既定位置はthumbnailTimestampPctで更新可。(Cloudflare Docs) -
MP4/M4A ダウンロード:
/downloadsを POST→ポーリング→ready になったら取得。ライブ録画もUIから有効化可。(Cloudflare Docs) - ウォーターマーク:Watermark profile を作成→アップロード時に適用。API/ダッシュボード両対応。(Cloudflare Docs)
6. 図解:APIの使い分け
7. 実装チェックリスト(本番運用向け)
-
アップロード:サーバーで Direct Creator Upload URL を発行(Basicは1回のみ有効)。200MB超や不安定回線はtusへ。(Cloudflare Docs)
-
再生セキュリティ:
requireSignedURLs:true+ 短寿命トークン + Allowed Origins で二重防御。鍵は /stream/keys でローテーション。(Cloudflare Docs) -
状態監視:Webhooksで processing→ready を受信し、DB/通知を更新(ポーリングより確実)。(Cloudflare Docs)
-
UX:
readyToStreamを見て再生開始、サムネURLでポスター生成。(Cloudflare Docs) -
アクセシビリティ:字幕(VTT)を用意。多言語は追加音声トラックも検討。(Cloudflare Docs)
-
ダウンロード:必要動画のみ /downloads を有効化し、ready になってからリンク配布。(Cloudflare Docs)
-
料金/運用:
- 保存は前払い:残高が尽きると新規アップロード不可 → 月初にチャージ or 監視。(Cloudflare Docs)
- 配信は後払い:使用量は Billable Usage / Analytics で確認。(Cloudflare Docs)
- 支払い:Billing → Payment でカード/PayPal、未払いは Invoices で Pay Now。(Cloudflare Docs)
8. すぐ試せるサンプル(cURL)
(A) Basic 直アップロードURL(200MB未満)
curl -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/stream/direct_upload" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"maxDurationSeconds":600}'
# => result.uploadURL, result.uid
(B) tus 初期化(大容量・再開可)
curl -i -X POST "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/stream" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Tus-Resumable: 1.0.0" \
-H "Upload-Length: 734003200"
# => 201 + Location ヘッダ
(C) 再生(iframe)
<iframe
src="https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/iframe"
width="1280" height="720" style="border:none" allow="accelerometer; autoplay; clipboard-write; encrypted-media; picture-in-picture" allowfullscreen>
</iframe>
9. 参考(公式ドキュメント)
- Pricing($5/1000分保存、$1/1000分配信 / ダッシュボード確認箇所)(Cloudflare Docs)
- Direct Creator Uploads(200MB閾値 / tus推奨) (Cloudflare Docs)
- Signed URLs / requireSignedURLs / token (Cloudflare Docs)
- Allowed Origins(自前プレイヤーでも有効) (Cloudflare Docs)
- Player埋め込み(iframeコード)(Cloudflare Docs)
- MP4ダウンロード(POST→ポーリング→ready)(Cloudflare Docs)
- Thumbnails(URLで生成 / 既定位置)(Cloudflare Docs)
- Watermark(プロファイル→適用)(Cloudflare Docs)
- Webhooks(処理完了通知)(Cloudflare Docs)
- 支払い設定(カード/PayPal/請求) (Cloudflare Docs)
- Live の課金と allowedOrigins の継承 (Cloudflare Docs)