目次
AWS Elemental MediaPackage v2.0 完全ガイド 2026
概要と課題
AWS Elemental MediaPackage は、ライブ・VOD コンテンツのパッケージング・配信保護・DVR サービス です。MediaLive のエンコード出力を受け取り、HLS / DASH / CMAF / MSS など複数配信フォーマットに Just-In-Time で変換し、DRM(Widevine・FairPlay・PlayReady)・タイムシフト DVR・起点配信(Origin Shield)を提供します。MediaLive → MediaPackage → CloudFront が AWS 標準ライブ配信スタックであり、大規模ライブイベント・OTT ストリーミング・スポーツ配信の中核コンポーネントです。
MediaPackage が解決する課題
単一エンコードから複数デバイス対応
- MediaLive で 1 つのマスターエンコードストリームを出力し、MediaPackage が HLS・DASH・CMAF・MSS を Just-In-Time で生成
- デバイスごとに別々のエンコードパスが不要 = エンコードコスト削減
ライブタイムシフト(DVR)機能
- ライブ配信中に「前のシーンを再生したい」「見逃し再生」をサポート
- MediaPackage は最大 336 時間のタイムシフト窓を自動管理
DRM コンテンツ保護の統合
- Widevine・FairPlay・PlayReady を SPEKE(Secure Packager and Encoder Key Exchange)で一元管理
- 有料 OTT サービスの不正視聴防止を別 DRM サーバー構築なしに実現
オリジン保護・スケーラビリティ
- MediaPackage が自動スケーリングするオリジンサーバーとして機能
- CloudFront からの大量リクエスト(数百万同時視聴者)に対応
- Origin Shield で オリジンへの負荷を 100 倍以上削減
ライブ・VOD の同時資産化
- Live to VOD(Harvest)機能でライブを同時に VOD 化
- ライブイベント終了と同時にオンデマンド資産が完成
アーキテクチャ全体像
graph TB
subgraph Sources["ソース"]
MediaLive["MediaLive<br/>ライブエンコード"]
S3["S3<br/>VOD ファイル"]
CustomSource["カスタムソース<br/>(URL)"]
end
subgraph MediaPackageCore["MediaPackage"]
Channel["チャンネル管理<br/>(ライブ・VOD)"]
Ingest["インジェスト<br/>(HLS/RTMP 受信)"]
Packaging["パッケージング<br/>(HLS/DASH/CMAF/MSS)"]
DRM["DRM 処理<br/>(SPEKE)"]
end
subgraph Features["高度な機能"]
DVR["DVR/タイムシフト<br/>(最大 336h)"]
LiveToVOD["Live to VOD<br/>(Harvest)"]
OriginShield["Origin Shield<br/>(保護)"]
SSAI["SSAI 対応<br/>(MediaTailor)"]
end
subgraph Outputs["出力エンドポイント"]
HLS["HLS エンドポイント<br/>(iOS/Apple TV)"]
DASH["DASH エンドポイント<br/>(Android/Web)"]
CMAF["CMAF エンドポイント<br/>(統合)"]
MSS["MSS エンドポイント<br/>(Xbox)"]
end
subgraph Distribution["配信・視聴"]
CloudFront["CloudFront<br/>CDN"]
Players["プレーヤー<br/>(HLS.js/dash.js)"]
Devices["デバイス<br/>(スマホ/TV/PC)"]
end
MediaLive -->|HLS/RTMP| Channel
S3 -->|VOD 入力| Channel
CustomSource -->|URL| Channel
Channel -->|HLS/RTMP 受信| Ingest
Ingest -->|複数フォーマット生成| Packaging
DRM -->|DRM 暗号化| Packaging
DVR -->|タイムシフト処理| Packaging
LiveToVOD -->|VOD 化| Packaging
OriginShield -->|オリジン保護| Packaging
SSAI -->|広告対応| Packaging
Packaging -->|出力| HLS
Packaging -->|出力| DASH
Packaging -->|出力| CMAF
Packaging -->|出力| MSS
HLS -->|格納| CloudFront
DASH -->|格納| CloudFront
CMAF -->|格納| CloudFront
MSS -->|格納| CloudFront
CloudFront -->|配信| Players
Players -->|再生| Devices
MediaPackage v1 vs v2 比較
graph LR
subgraph v1["MediaPackage v1<br/>(従来)"]
A["Channel / Origin Endpoint<br/>API 型"]
B["Linear/VOD 分離<br/>独立管理"]
C["SDK サポート限定<br/>(AWS SDK のみ)"]
end
subgraph v2["MediaPackage v2<br/>(2024- GA)"]
D["Unified API<br/>(REST)"]
E["Live/VOD 統合<br/>Harvest で同時化"]
F["OpenAPI / gRPC<br/>(ベンダー中立)"]
G["100k+ 同時視聴<br/>(スケール強化)"]
end
v1 -->|2024 年移行開始| v2
コアコンポーネント詳説
1. Channel(チャンネル)
ライブ・VOD コンテンツの入力点。
チャンネルの役割
- ライブエンコードストリーム(RTMP / HLS Pull)の受信
- VOD ファイル(S3 URL)の取り込み
- 複数 Origin Endpoint への同時配信管理
2. Origin Endpoint(配信エンドポイント)
複数パッケージングフォーマットを提供。
エンドポイントタイプ
HLS_PACKAGE:Apple iOS・Apple TV 向けDASH_PACKAGE:Android・Web ブラウザ向けCMAF_PACKAGE:Apple Low Latency HLS(Apple フォーマット統一)MSS_PACKAGE:Microsoft Smooth Streaming(Xbox)
エンドポイント設定
- SegmentDurationSeconds:セグメント長(通常 6 秒)
- PlaylistWindowSeconds:プレイリスト窓(DVR 対応時間)
- TimeDelaySeconds:配信遅延(DVR 保護)
- StartoverWindowSeconds:24 時間タイムシフト設定
3. Packaging Configuration(パッケージング設定)
暗号化・DRM・フィルタリングを定義。
設定項目
- HLS / DASH / CMAF / MSS ごとの暗号化方式
- DRM システム ID(Widevine・FairPlay・PlayReady)
- Stream Selection(ビットレート範囲・言語選択)
- Ad Markers(広告マーカー形式:SCTE-35・DATERANGE)
4. DRM Protection(DRM 保護)
SPEKE(Secure Packager and Encoder Key Exchange)を使用。
対応 DRM
- Widevine:Google Play・Android・Web ブラウザ
- FairPlay:Apple iOS・Apple TV・Safari
- PlayReady:Windows・Xbox・Silverlight
SPEKE フロー
- MediaPackage → SPEKE キーサーバー
- → DRM キー取得 → HLS/DASH に暗号化情報埋め込み
- → プレーヤーが DRM キー取得 → 再生
5. Live to VOD(Harvest)
ライブストリームを VOD 資産に変換。
Harvest ジョブ
- ライブ配信の指定時間帯を抽出
- S3 に VOD ファイルとして保存
- マニフェスト・セグメント自動生成
- ライブ配信と並行実行(ダウンタイムなし)
6. Origin Shield(オリジン保護)
CloudFront キャッシュ層とオリジン間の中間層。
効果
- CloudFront からの多数リクエストを 1 つに集約(最大 100 倍削減)
- オリジン(MediaPackage)への負荷軽減
- 数百万同時視聴者対応
主要ユースケース 10+
1. OTT スポーツ配信(複数デバイス対応)
MediaLive エンコード → MediaPackage (HLS・DASH・CMAF) → CloudFront → iOS・Android・Web 同時配信
スタジアム RTMP → MediaLive
→ HLS (MediaPackage) → CloudFront
├── iOS HLS ≈ 5 Mbps
├── Android DASH ≈ 4 Mbps
└── Web CMAF ≈ 3-6 Mbps(適応)
2. 24/7 リニアテレビチャンネル
Multiplex(複数プログラム)→ MediaLive → MediaPackage → MediaTailor(広告挿入)→ CloudFront
- チャンネル A / B / C → StatMux(統計多重)
- → MediaLive → MediaPackage → MediaTailor
- → 個人化広告挿入 → 配信
3. ライブイベント + VOD 同時資産化
ライブ配信中に Harvest ジョブで VOD 化。
ライブ(2 時間) → MediaPackage
├── リアルタイム配信(視聴者)
└── Harvest(2 時間全体)→ S3 VOD ファイル
↓ ライブ終了後即座に
MediaConvert → HLS/DASH VOD → オンデマンド配信
4. DRM コンテンツ保護(有料配信)
Widevine・FairPlay 統合で複数 DRM サーバー不要。
- プレミアムコンテンツ → MediaPackage
- → SPEKE キーサーバー → DRM 暗号化
- → iOS(FairPlay)/ Android(Widevine)
- → 不正視聴防止
5. タイムシフト VOD(見逃し配信)
DVR ウィンドウを活用した 24 時間見逃し再生。
ライブ配信(StartoverWindow: 86400 秒)
├── リアルタイム視聴
└── 24 時間以内なら任意時点から再生可能
6. マルチ言語配信
複数音声トラック・字幕を 1 エンドポイントで提供。
- マスター映像 + 日本語音声 + 英語音声 + フランス語字幕
- → HLS エンドポイント(複数オーディオトラック)
- → プレーヤーで言語選択
7. リアルタイムビジュアル分析
MediaPackage ストリーム → Rekognition Video → リアルタイム検出(人物・顔・オブジェクト)
- ライブ配信中 → Kinesis Video Streams
- → Rekognition Video(顔認識・人物検出)
- → CloudWatch メトリクス
8. CDN キャッシュ最適化(Origin Shield)
CDN からのリクエスト激増時の保護。
- 数百万同時視聴者 → CloudFront
- → Origin Shield(中間キャッシュ層)
- → MediaPackage(オリジン保護)
- ≈ 請求データ転送量 1/100
9. 複数リージョン配信
各地域向けに異なるコンテンツを同時配信。
1 ライブソース → MediaPackage
├── エンドポイント 1(日本)→ 日本語・日本広告
├── エンドポイント 2(米国)→ 英語・米国広告
└── エンドポイント 3(EU)→ フランス語・EU 広告
10. SSAI(Server-Side Ad Insertion)統合
MediaTailor と連携して広告ブロッカー回避。
MediaPackage → MediaTailor
├── コンテンツストリーム取得
├── SCTE-35 マーカーから広告スロット検出
├── 広告サーバー(VAST)から取得
└── シームレス挿入 → 視聴者
11. Harvest による自動 VOD 化
ライブ配信と同時に VOD 資産を自動生成。
- HarvestJob(開始時刻・終了時刻指定)
- → MediaPackage が該当期間を抽出
- → S3 に VOD マニフェスト・セグメント保存
- → 編集なしで即オンデマンド配信開始
12. Kubernetes・マイクロサービス統合
MediaPackage REST API で Helm・GitOps 管理。
- helm install mediapackage-stack/ \
- –values config-dev.yaml
- → Terraform / CloudFormation で IAC
- → GitOps パイプラインで自動デプロイ
設定・操作の具体例
AWS CLI を使用した基本的な設定
例1: ライブチャンネル + HLS/DASH エンドポイント
#!/bin/bash
# 1. チャンネル作成(ライブ配信用)
CHANNEL_ID=$(aws mediapackage create-channel \
--id live-sports-channel \
--description "Live sports streaming channel" \
--query 'Channel.Id' --output text)
echo "Channel created: $CHANNEL_ID"
# 2. HLS エンドポイント(DVR なし・リアルタイム)
aws mediapackage create-origin-endpoint \
--channel-id "$CHANNEL_ID" \
--id hls-live-endpoint \
--hls-package '{
"SegmentDurationSeconds": 6,
"PlaylistWindowSeconds": 60,
"PlaylistType": "EVENT",
"UseAudioRenditionGroup": false,
"AdMarkers": "SCTE35_ENHANCED",
"StreamSelection": {
"StreamOrder": "ORIGINAL",
"MinVideoBitsPerSecond": 0,
"MaxVideoBitsPerSecond": 2147483647
}
}' \
--origination ALLOW
# 3. HLS エンドポイント(DVR あり・24 時間見逃し対応)
aws mediapackage create-origin-endpoint \
--channel-id "$CHANNEL_ID" \
--id hls-dvr-endpoint \
--hls-package '{
"SegmentDurationSeconds": 6,
"PlaylistWindowSeconds": 3600,
"PlaylistType": "EVENT",
"UseAudioRenditionGroup": true,
"AdMarkers": "SCTE35_ENHANCED"
}' \
--startover-window-seconds 86400 \
--time-delay-seconds 0
# 4. DASH エンドポイント(Android 向け)
aws mediapackage create-origin-endpoint \
--channel-id "$CHANNEL_ID" \
--id dash-endpoint \
--dash-package '{
"SegmentDurationSeconds": 6,
"ManifestWindowSeconds": 60,
"MinBufferTimeSeconds": 6,
"SuggestedPresentationDelaySeconds": 0,
"StreamSelection": {
"StreamOrder": "ORIGINAL"
}
}'
# 5. CMAF エンドポイント(Low Latency HLS)
aws mediapackage create-origin-endpoint \
--channel-id "$CHANNEL_ID" \
--id cmaf-ll-endpoint \
--cmaf-package '{
"SegmentDurationSeconds": 2,
"StreamSelection": {
"StreamOrder": "ORIGINAL"
}
}'
echo "Endpoints created for channel: $CHANNEL_ID"
例2: DRM(SPEKE)+ DVR 統合エンドポイント
# DRM + DVR 統合設定
aws mediapackage create-origin-endpoint \
--channel-id "$CHANNEL_ID" \
--id dash-drm-dvr-endpoint \
--dash-package '{
"SegmentDurationSeconds": 6,
"ManifestWindowSeconds": 600,
"Encryption": {
"RoleArn": "arn:aws:iam::123456789012:role/MediaPackageSpekeRole",
"SpekeKeyProvider": {
"CertificateArn": "arn:aws:acm:ap-northeast-1:123456789012:certificate/xxxxx",
"ResourceId": "resource-123",
"SystemIds": [
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
"94ce86fb-07ff-4f43-adb8-93d2fa968ca2"
],
"Url": "https://speke-endpoint.example.com/v1/copyProtection"
}
},
"StreamSelection": {
"StreamOrder": "ORIGINAL"
}
}' \
--startover-window-seconds 86400 \
--origination ALLOW
例3: Live to VOD(Harvest)ジョブ
# Harvest ジョブ作成(ライブの 1 時間を VOD 化)
aws mediapackage create-harvest-job \
--id harvest-job-001 \
--channel-id "$CHANNEL_ID" \
--start-time 2026-04-26T10:00:00Z \
--end-time 2026-04-26T11:00:00Z \
--origin-endpoint-id hls-dvr-endpoint \
--s3-destination '{
"BucketName": "my-vod-bucket",
"ManifestKey": "harvested/sports-game-001/manifest.m3u8",
"RoleArn": "arn:aws:iam::123456789012:role/MediaPackageHarvestRole"
}'
echo "Harvest job started for VOD conversion"
Python SDK による動的エンドポイント管理
import boto3
import json
from datetime import datetime, timedelta
class MediaPackageManager:
def __init__(self, region='ap-northeast-1'):
self.client = boto3.client('mediapackage', region_name=region)
def create_live_channel(self, channel_id, description):
"""ライブチャンネル作成"""
response = self.client.create_channel(
Id=channel_id,
Description=description
)
return response['Channel']
def create_hls_live_endpoint(self, channel_id, endpoint_id, dvr_window_seconds=None):
"""HLS エンドポイント作成"""
hls_package = {
'SegmentDurationSeconds': 6,
'PlaylistWindowSeconds': 60 if not dvr_window_seconds else dvr_window_seconds,
'PlaylistType': 'EVENT',
'AdMarkers': 'SCTE35_ENHANCED',
'StreamSelection': {
'StreamOrder': 'ORIGINAL',
'MinVideoBitsPerSecond': 0,
'MaxVideoBitsPerSecond': 2147483647
}
}
params = {
'ChannelId': channel_id,
'Id': endpoint_id,
'HlsPackage': hls_package,
'Origination': 'ALLOW'
}
if dvr_window_seconds:
params['StartoverWindowSeconds'] = dvr_window_seconds
response = self.client.create_origin_endpoint(**params)
return response['OriginEndpoint']
def create_dash_endpoint(self, channel_id, endpoint_id):
"""DASH エンドポイント作成"""
response = self.client.create_origin_endpoint(
ChannelId=channel_id,
Id=endpoint_id,
DashPackage={
'SegmentDurationSeconds': 6,
'ManifestWindowSeconds': 60,
'MinBufferTimeSeconds': 6,
'StreamSelection': {
'StreamOrder': 'ORIGINAL'
}
}
)
return response['OriginEndpoint']
def create_cmaf_ll_endpoint(self, channel_id, endpoint_id):
"""CMAF Low Latency エンドポイント作成"""
response = self.client.create_origin_endpoint(
ChannelId=channel_id,
Id=endpoint_id,
CmafPackage={
'SegmentDurationSeconds': 2, # Low Latency
'StreamSelection': {
'StreamOrder': 'ORIGINAL'
}
}
)
return response['OriginEndpoint']
def create_drm_endpoint(self, channel_id, endpoint_id, speke_url, resource_id, cert_arn):
"""DRM(SPEKE)対応エンドポイント"""
response = self.client.create_origin_endpoint(
ChannelId=channel_id,
Id=endpoint_id,
DashPackage={
'SegmentDurationSeconds': 6,
'Encryption': {
'SpekeKeyProvider': {
'CertificateArn': cert_arn,
'ResourceId': resource_id,
'SystemIds': [
'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed', # Widevine
'94ce86fb-07ff-4f43-adb8-93d2fa968ca2' # FairPlay
],
'Url': speke_url
}
}
}
)
return response['OriginEndpoint']
def create_harvest_job(self, channel_id, endpoint_id, bucket_name, manifest_key,
start_time, end_time):
"""Live to VOD Harvest ジョブ"""
response = self.client.create_harvest_job(
Id=f"harvest-{int(datetime.now().timestamp())}",
ChannelId=channel_id,
OriginEndpointId=endpoint_id,
StartTime=start_time,
EndTime=end_time,
S3Destination={
'BucketName': bucket_name,
'ManifestKey': manifest_key,
'RoleArn': 'arn:aws:iam::123456789012:role/MediaPackageHarvestRole'
}
)
return response['HarvestJob']
def get_endpoint_url(self, channel_id, endpoint_id):
"""エンドポイント URL 取得"""
response = self.client.describe_origin_endpoint(
ChannelId=channel_id,
Id=endpoint_id
)
return response['OriginEndpoint']['Url']
# 使用例
if __name__ == '__main__':
manager = MediaPackageManager()
# チャンネル作成
channel = manager.create_live_channel(
channel_id='live-sports-channel',
description='Live sports streaming'
)
print(f"Channel: {json.dumps(channel, indent=2, default=str)}")
# HLS エンドポイント(リアルタイム)
hls_endpoint = manager.create_hls_live_endpoint(
channel_id='live-sports-channel',
endpoint_id='hls-live'
)
print(f"HLS Live Endpoint: {hls_endpoint['Url']}")
# HLS エンドポイント(DVR 24 時間)
hls_dvr_endpoint = manager.create_hls_live_endpoint(
channel_id='live-sports-channel',
endpoint_id='hls-dvr',
dvr_window_seconds=86400
)
print(f"HLS DVR Endpoint: {hls_dvr_endpoint['Url']}")
# DASH エンドポイント
dash_endpoint = manager.create_dash_endpoint(
channel_id='live-sports-channel',
endpoint_id='dash'
)
print(f"DASH Endpoint: {dash_endpoint['Url']}")
# CMAF Low Latency
cmaf_endpoint = manager.create_cmaf_ll_endpoint(
channel_id='live-sports-channel',
endpoint_id='cmaf-ll'
)
print(f"CMAF LL Endpoint: {cmaf_endpoint['Url']}")
# Harvest ジョブ
start = datetime.utcnow()
end = start + timedelta(hours=1)
harvest = manager.create_harvest_job(
channel_id='live-sports-channel',
endpoint_id='hls-dvr',
bucket_name='my-vod-bucket',
manifest_key='harvested/game-001/manifest.m3u8',
start_time=start.isoformat() + 'Z',
end_time=end.isoformat() + 'Z'
)
print(f"Harvest Job: {json.dumps(harvest, indent=2, default=str)}")
CloudFormation による IaC
AWSTemplateFormatVersion: '2010-09-09'
Description: 'MediaPackage Channel with Multi-Format Endpoints'
Resources:
MediaPackageRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: mediapackage.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/MediaPackageFullAccess'
HarvestRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: mediapackage.amazonaws.com
Action: 'sts:AssumeRole'
Policies:
- PolicyName: S3Access
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 's3:PutObject'
Resource: 'arn:aws:s3:::my-vod-bucket/*'
LiveChannel:
Type: AWS::MediaPackage::Channel
Properties:
Id: live-sports-channel
Description: Live sports streaming channel
HlsLiveEndpoint:
Type: AWS::MediaPackage::OriginEndpoint
Properties:
ChannelId: !Ref LiveChannel
Id: hls-live
HlsPackage:
SegmentDurationSeconds: 6
PlaylistWindowSeconds: 60
PlaylistType: EVENT
AdMarkers: SCTE35_ENHANCED
StreamSelection:
StreamOrder: ORIGINAL
MinVideoBitsPerSecond: 0
MaxVideoBitsPerSecond: 2147483647
Origination: ALLOW
HlsDvrEndpoint:
Type: AWS::MediaPackage::OriginEndpoint
Properties:
ChannelId: !Ref LiveChannel
Id: hls-dvr
HlsPackage:
SegmentDurationSeconds: 6
PlaylistWindowSeconds: 3600
PlaylistType: EVENT
AdMarkers: SCTE35_ENHANCED
StartoverWindowSeconds: 86400
Origination: ALLOW
DashEndpoint:
Type: AWS::MediaPackage::OriginEndpoint
Properties:
ChannelId: !Ref LiveChannel
Id: dash
DashPackage:
SegmentDurationSeconds: 6
ManifestWindowSeconds: 60
MinBufferTimeSeconds: 6
StreamSelection:
StreamOrder: ORIGINAL
CmafLlEndpoint:
Type: AWS::MediaPackage::OriginEndpoint
Properties:
ChannelId: !Ref LiveChannel
Id: cmaf-ll
CmafPackage:
SegmentDurationSeconds: 2
StreamSelection:
StreamOrder: ORIGINAL
Outputs:
ChannelId:
Value: !Ref LiveChannel
HlsLiveUrl:
Value: !GetAtt HlsLiveEndpoint.Url
HlsDvrUrl:
Value: !GetAtt HlsDvrEndpoint.Url
DashUrl:
Value: !GetAtt DashEndpoint.Url
CmafLlUrl:
Value: !GetAtt CmafLlEndpoint.Url
類似サービス比較表
| 項目 | MediaPackage | Unified Streaming | Bitmovin | Wowza | JW Player |
|---|---|---|---|---|---|
| 提供形態 | マネージド | SaaS | SaaS | セルフホスト / クラウド | SaaS |
| HLS/DASH/CMAF | ✅ | ✅ | ✅ | ✅ | ✅ |
| Just-In-Time パッケージング | ✅ | ✅ | ✅ | ✅ | ✅ |
| DRM(SPEKE) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Live to VOD(Harvest) | ✅ | ✅ | ✅ | ✅ | ✅ |
| DVR/タイムシフト | ✅(336h) | ✅ | ✅ | ✅ | ✅ |
| Origin Shield | ✅ | 別料金 | 別料金 | なし | なし |
| AWS 統合 | ネイティブ | API | API | API | API |
| 100k+ 同時視聴対応 | ✅ | ✅ | ✅ | ✅ | ✅ |
| SSAI(MediaTailor) | ✅ | 限定的 | 限定的 | ✅ | ✅ |
ベストプラクティス
✅ 推奨事項
-
複数エンドポイントを同時提供
- HLS(iOS)・DASH(Android)・CMAF(統一)を同時出力
- 1 チャンネルで複数フォーマット提供
-
DVR ウィンドウの適切な設定
- スポーツ:24 時間(見逃し対応)
- ニュース:3-6 時間(容量・コスト最適化)
- イベント:リアルタイムのみ(PlaylistWindow: 60s)
-
DRM + SPEKE の統合
- Widevine・FairPlay を同時対応
- SPEKE エンドポイントの冗長性確保
-
Live to VOD(Harvest)の活用
- ライブ配信と同時に Harvest ジョブ実行
- ライブ終了後即座に VOD 資産完成
-
Origin Shield による保護
- 数百万同時視聴者対応時は必須
- CDN リクエスト削減で転送コスト低減
-
SCTE-35 マーカー対応
- AdMarkers: SCTE35_ENHANCED で広告対応
- MediaTailor SSAI と連携
❌ 回避すべき事項
-
単一フォーマット配信
- HLS のみで Android 対応不可
- iOS・Android・Web を同時対応すべき
-
無限 DVR 窓設定
- ストレージコスト膨張
- リテンション期間を明確に設定
-
DRM なし有料コンテンツ配信
- 不正視聴防止ができない
- 有料配信は SPEKE 統合必須
-
Origin Shield 無視
- 大規模イベント時にオリジン過負荷
- CDN リクエスト削減で全体コスト低減
-
SSAI 非対応
- クライアントサイド広告がブロッカーで削除
- 広告収益損失
- MediaTailor 統合で SSAI 対応
-
Harvest 未活用
- ライブ配信終了後の VOD 化に手作業
- 並行実行で自動化すべき
トラブルシューティング表
| 症状 | 原因 | 対策 |
|---|---|---|
| エンドポイント URL 404 | チャンネル未開始 / 入力なし | MediaLive から HLS/RTMP 送信確認 |
| 字幕が表示されない | StreamSelection でフィルタリング | PackagingConfiguration で全字幕許可 |
| DRM 暗号化失敗 | SPEKE エンドポイント接続不可 | SPEKE URL 疎通確認・証明書確認 |
| DVR ウィンドウ短すぎる | PlaylistWindow 設定小 | StartoverWindowSeconds 増加 |
| Harvest ジョブ失敗 | S3 バケット権限なし / 時間指定エラー | IAM Role 確認 / 時間帯確認(UTC) |
| Origin Shield 効果なし | CloudFront で Origin Shield 未設定 | CloudFront で Origin Shield 有効化 |
| マニフェスト生成遅い | Just-In-Time 処理負荷 | エンドポイント設定最適化・容量確認 |
| 複数言語音声が混在 | AudioRenditionGroup 設定ミス | StreamSelection で言語別フィルタ |
| SCTE-35 マーカー無視 | AdMarkers 設定なし | AdMarkers: SCTE35_ENHANCED に設定 |
| ファイルサイズ巨大(Harvest) | セグメント数多・期間長 | Harvest 期間を短くする・セグメント長増加 |
2025-2026 最新動向
MediaPackage v2 新機能
-
Unified REST API
- v1 のレガシー API から OpenAPI / REST に移行
- ベンダー中立・複数 SDK サポート
-
Live to VOD(Harvest)拡張
- 複数マニフェスト同時 Harvest
- リアルタイム Harvest(ライブ中抽出)
-
100k+ 同時視聴対応
- スケーラビリティ強化
- Origin Shield と統合で安定配信
-
CDN 認可の統合
- CloudFront Secure Token と自動連携
- 不正ダウンロード防止
-
低レイテンシー(Low Latency HLS)GA
- CMAF + LL HLS で <2 秒遅延
- テレビ放送品質を目指す
-
DASH IOP(Interoperability Profile)対応
- 標準準拠で互換性向上
- 複数プレーヤー・デバイス最適化
学習リソース・参考文献
公式ドキュメント
- AWS Elemental MediaPackage - What is MediaPackage?
- Creating live-to-VOD assets with MediaPackage
- MediaPackage v2 User Guide
- AWS Elemental MediaPackage Pricing
AWS ブログ・記事
オープンソース・参考実装
- HLS Specification (IETF) - HLS 仕様
- MPEG-DASH Standard - DASH 標準化
- CMAF Specification - Common Media Application Format
ベンダー・競合サービス比較
- Unified Streaming Platform - Just-In-Time パッケージング
- Bitmovin Video Platform - エンドツーエンド動画プラットフォーム
- Wowza Streaming Engine - セルフホスト配信
- Castlabs DRM - DRM 統合
実装チェックリスト
- [ ] MediaPackage チャンネル作成(ライブ / VOD)
- [ ] Input Security Group(ISG)設定
- [ ] HLS エンドポイント作成(リアルタイム)
- [ ] HLS エンドポイント作成(DVR 対応)
- [ ] DASH エンドポイント作成(Android 対応)
- [ ] CMAF エンドポイント作成(Low Latency)
- [ ] DRM 設定(SPEKE + Widevine + FairPlay)
- [ ] Live to VOD(Harvest)ジョブ設定
- [ ] Origin Shield 有効化(CloudFront)
- [ ] SCTE-35 マーカー対応(AdMarkers 設定)
- [ ] MediaTailor SSAI 統合(広告挿入予定の場合)
- [ ] CloudFormation / CDK で IaC 管理
- [ ] テスト配信で複数デバイス・フォーマット確認
- [ ] CloudWatch メトリクス・ログ監視設定
まとめ
AWS Elemental MediaPackage は、ライブ・VOD コンテンツのパッケージング・配信保護・DVR サービス です。MediaLive のエンコード出力を受け取り、HLS・DASH・CMAF・MSS を Just-In-Time で生成し、DRM(SPEKE)・タイムシフト DVR・Origin Shield・Live to VOD(Harvest)を提供します。MediaLive → MediaPackage → CloudFront が AWS 標準ライブ配信スタックであり、数百万同時視聴者対応のエンタープライズグレード配信基盤を実現します。
活用シーン:OTT ストリーミング・スポーツ配信・ライブイベント・24/7 リニアチャンネル・有料配信・見逃し配信
最大のメリット:単一エンコードから複数デバイス対応、自動 VOD 化、DRM 統合、100 万同時視聴対応
次ステップ:MediaTailor(SSAI)・CloudFront(CDN)・Rekognition Video(分析)と組み合わせて、エンドツーエンドの高度なライブ配信プラットフォームを構築
最終更新:2026-04-26 バージョン:v2.0