動画プラットフォーム比較:PeerTube vs Owncast vs MediaCMS でYouTube代替を構築する
オープンソースラボ編集部 ・ 2026年6月14日
動画プラットフォーム比較:PeerTube vs Owncast vs MediaCMS でYouTube代替を構築する
YouTubeへの依存から脱却し、自社サーバーで動画配信・ライブストリーミングをコントロールしたい組織向けにOSSセルフホスト型動画プラットフォームが充実しています。PeerTube(連合型・ActivityPub)・Owncast(ライブストリーミング特化)・MediaCMS(エンタープライズ向けVOD)の3つが2026年の主要OSS動画プラットフォームです。
セルフホスト型動画プラットフォームを使う理由
- 完全制御: 動画の削除・制限・広告挿入をYouTubeに支配されない
- プライバシー: 視聴者データ・アナリティクスを自社サーバーで管理→GoogleへのデータISFなし
- 収益化の自由: Patreon・会員制・ペイウォールを自社ポリシーで実装
- 帯域コスト削減: BitTorrent/WebRTC P2Pで視聴者同士が帯域を分担(PeerTube)
主要ツールの概要
PeerTube
2017年公開(Framasoft)、TypeScript製のOSSです。GitHubスター13k+。ActivityPub連合プロトコルベースの分散型動画プラットフォームで、異なるPeerTubeインスタンス間でVideoとFollowerを連合でき(MastodonからもPeerTubeの動画をフォロー可能)、P2P(WebTorrent)で視聴者間で帯域を分散します。
# docker-compose.yml: PeerTube
version: "3.8"
services:
peertube:
image: chocobozzz/peertube:production-bookworm
restart: unless-stopped
ports:
- "9000:9000"
environment:
PEERTUBE_DB_USERNAME: peertube
PEERTUBE_DB_PASSWORD: ${DB_PASS}
PEERTUBE_DB_HOSTNAME: postgres
PEERTUBE_WEBSERVER_HOSTNAME: peertube.example.com
PEERTUBE_WEBSERVER_HTTPS: "true"
PEERTUBE_SMTP_HOSTNAME: ${SMTP_HOST}
PEERTUBE_SMTP_PORT: 587
PEERTUBE_SMTP_USERNAME: ${SMTP_USER}
PEERTUBE_SMTP_PASSWORD: ${SMTP_PASS}
PEERTUBE_SMTP_FROM: no-reply@peertube.example.com
PEERTUBE_ADMIN_EMAIL: admin@example.com
PEERTUBE_SECRET: ${PEERTUBE_SECRET}
volumes:
- peertube_data:/data
- peertube_config:/config
depends_on: [postgres, redis]
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: peertube
POSTGRES_USER: peertube
POSTGRES_PASSWORD: ${DB_PASS}
volumes:
- peertube_pg:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- peertube_redis:/data
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/ssl
volumes:
peertube_data:
peertube_config:
peertube_pg:
peertube_redis:
# Python: PeerTube REST APIで動画を自動アップロード・管理
import requests
import os
PEERTUBE_URL = 'https://peertube.example.com'
USERNAME = 'admin'
PASSWORD = os.environ['PEERTUBE_ADMIN_PASSWORD']
def get_oauth_token() -> str:
'''PeerTube OAuthトークンを取得'''
# クライアントクレデンシャルを取得
client_resp = requests.get(f'{PEERTUBE_URL}/api/v1/oauth-clients/local')
client = client_resp.json()
# アクセストークンを取得
token_resp = requests.post(f'{PEERTUBE_URL}/api/v1/users/token', data={
'client_id': client['client_id'],
'client_secret': client['client_secret'],
'grant_type': 'password',
'username': USERNAME,
'password': PASSWORD,
'response_type': 'code',
})
return token_resp.json()['access_token']
def upload_video(token: str, video_path: str, title: str, description: str,
category: int = 1, privacy: int = 1) -> dict:
'''動画をPeerTubeにアップロード'''
headers = {'Authorization': f'Bearer {token}'}
# リジューマブルアップロード初期化
file_size = os.path.getsize(video_path)
init_resp = requests.post(
f'{PEERTUBE_URL}/api/v1/videos/upload-resumable',
headers={**headers, 'Content-Type': 'application/json', 'X-Upload-Content-Length': str(file_size)},
json={
'name': title,
'description': description,
'category': category,
'privacy': privacy, # 1=Public, 3=Private, 4=Internal
'language': 'ja',
'commentsEnabled': True,
},
)
upload_url = init_resp.headers.get('Location')
# ファイルをチャンクでアップロード
chunk_size = 10 * 1024 * 1024 # 10MB
with open(video_path, 'rb') as f:
offset = 0
while True:
chunk = f.read(chunk_size)
if not chunk:
break
end = offset + len(chunk) - 1
resp = requests.put(
upload_url,
headers={**headers, 'Content-Range': f'bytes {offset}-{end}/{file_size}'},
data=chunk,
)
offset += len(chunk)
print(f'アップロード進捗: {offset/file_size*100:.1f}%')
return resp.json()
# 使用例
token = get_oauth_token()
result = upload_video(token, 'webinar.mp4', '2026年Q2 ウェビナー', '製品アップデートのウェビナー録画')
print(f'動画URL: {PEERTUBE_URL}/videos/watch/{result["video"]["shortUUID"]}')
Owncast
2020年公開、Go製のOSSです。GitHubスター9k+。ライブストリーミング特化のセルフホストOSSプラットフォームで、OBSからrtmp://でストリームを受け取りHLS変換してWebブラウザに配信します。リアルタイムチャット・絵文字・フォロワー通知(ActivityPub連合)を内蔵し、単一バイナリで動作します。
# Owncast インストール(単一バイナリ)
curl -s https://owncast.online/install.sh | bash
./owncast # 起動(ポート8080 + RTMPポート1935)
# Docker での起動
docker run -d -p 8080:8080 -p 1935:1935 -v owncast_data:/app/data --name owncast ghcr.io/owncast/owncast:latest
# OBS でのストリーム設定
# サーバー: rtmp://your-server:1935/live
# ストリームキー: OwncastのAdmin UIで設定したキー
MediaCMS
2020年公開、Python製のOSSです。GitHubスター3k+。エンタープライズ向けのVOD(Video-on-Demand)プラットフォームで、マルチユーザー・チャンネル・プレイリスト・字幕・解像度変換・HLS配信を提供します。ビデオポータル・教育プラットフォーム・社内研修動画管理に適しています。
# docker-compose.yml: MediaCMS
version: "3.8"
services:
web:
image: mediacms/mediacms:latest
ports:
- "80:80"
environment:
POSTGRES_DB: mediacms
POSTGRES_USER: mediacms
POSTGRES_PASSWORD: ${DB_PASS}
SECRET_KEY: ${SECRET_KEY}
FRONTEND_HOST: https://media.example.com
MEDIA_IS_FRONTEND_ACCESSIBLE: "True"
volumes:
- mediacms_media:/home/mediacms.io/mediacms/media_files
depends_on: [db, redis]
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mediacms
POSTGRES_USER: mediacms
POSTGRES_PASSWORD: ${DB_PASS}
volumes:
- mediacms_pg:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
mediacms_media:
mediacms_pg:
機能比較表
| 比較項目 | PeerTube | Owncast | MediaCMS |
|---|---|---|---|
| VOD(録画配信) | ✅ | ✅(録画保存可) | ✅ 最強 |
| ライブストリーミング | ✅ | ✅ 特化 | △ |
| ActivityPub連合 | ✅ | ✅ | ❌ |
| P2P帯域分散 | ✅(WebTorrent) | ❌ | ❌ |
| GitHub Stars | 13k+ | 9k+ | 3k+ |
動画プラットフォームはその他カテゴリ/categories/miscのオープンソースコンテンツ管理ツールとして、ウェビナー録画・オンラインコース・社内研修動画を社外に流出せず完全管理するコンプライアンス要件に対応します。DevOpsカテゴリ/categories/devopsのNginxリバースプロキシ・Let's Encrypt SSL・S3互換ストレージ(MinIO・Wasabi)との組み合わせで大容量動画を低コストで配信するインフラ構成が多くの組織で採用されています。
FAQ
Q. PeerTubeとYouTubeの連合(ActivityPub)はどう機能しますか?
A. PeerTubeはActivityPubプロトコルを実装してMastodon・Pleroma等のFediverseと連合します。仕組み: ①PeerTubeのチャンネルはActivityPubのActor→Mastodonユーザーから@channel@peertube.example.comでフォロー可能②動画アップロード→Mastodonのフォロワーのタイムラインに動画が流れる③複数PeerTubeインスタンスが連合→どのインスタンスからでも他インスタンスの動画を検索・視聴・コメント可能。ピア配信(WebTorrent): 同じ動画を視聴している視聴者同士がP2Pで帯域を分担→サーバー負荷と転送コストを削減(人気動画は70%以上のトラフィックがP2P経由のケースも)。管理: 連合ポリシーでブロックリスト・許可リストを設定→悪意のあるインスタンスをブロック。
Q. OwncastでOBSからライブ配信をするための設定手順は?
A. OwncastのAdmin UIでRTMPストリームキーを設定してOBSから配信します。手順: ①Owncast起動→http://localhost:8080/adminでAdmin UI→Settings→Stream Keys→新しいキーを生成②OBS Studio: 設定→配信→サービス: カスタム→サーバー: rtmp://your-server:1935/live→ストリームキー: 手順①のキー③OBS: 配信開始→Owncastのhttp://your-server:8080で視聴者がライブを視聴可能。配信品質: OBSのエンコード設定(1080p30fps・6Mbps・H.264)でOwncastに送信→OwncastがCPUでHLS変換(720p・480p・360p)→視聴者のネット帯域に合わせて自動選択。ActivityPub: 配信開始時にフォロワー(Mastodon等)に通知が届く。
Q. PeerTubeの帯域コストを最小化するにはどうすればいいですか?
A. オブジェクトストレージ(S3)への動画オフロードとP2P帯域分散の両立が最も効果的です。①S3オフロード: PeerTubeの設定でobject_storage.enabled: true→bucket_name: peertube-videos→動画ファイル(MP4・HLSセグメント)をS3互換ストレージ(Wasabi $7/TB/月・Backblaze B2 $6/TB/月)に保存→VPSの帯域消費をほぼゼロに②WebTorrent P2P: 同時視聴者数が多い動画はP2Pが機能→サーバー送信量が大幅削減(視聴者10人で同じ動画を視聴→各視聴者が約30%をP2P受信→サーバー送信70%削減)③CDN統合: CloudflareのFree CDNをNginxの上に配置→世界中からの動画リクエストをエッジキャッシュ。
Q. MediaCMSで社内研修動画ポータルを構築するポイントは?
A. ユーザーグループ・チャンネル・アクセス制御・メール通知・字幕機能を設定します。①ユーザーグループ: 「新入社員」「エンジニア」「マネージャー」グループを作成→各グループに視聴可能なチャンネルを制限②チャンネル: 「技術研修」「コンプライアンス」「製品トレーニング」等のチャンネルを作成→動画をチャンネルに整理③アクセス制御: PORTAL_WORKFLOW=private(ログイン必須)→社外への動画流出を防止④自動字幕: FFMPEG_CODEC_PROCESSORSでWhisper AIを統合→アップロード動画に自動字幕生成⑤Notificationメール: 新動画アップロード時にグループメンバーにメール通知→研修管理の効率化。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 分散型・YouTube代替・ActivityPub連合・P2P | PeerTube |
| ライブストリーミング特化・OBS配信 | Owncast |
| VOD・社内動画ポータル・多機能管理 | MediaCMS |