目次
AWS Elemental MediaLive v2.0 完全ガイド 2026
概要と課題
AWS Elemental MediaLive は、リアルタイムライブビデオストリーミングをエンコード・配信するマネージドサービス です。テレビ放送・スポーツライブ・コンサート配信・イベント配信に特化し、RTMP / RTP / HLS Pull / SDI 等の多様な入力フォーマットを受け取り、H.264・H.265 でマルチビットレートにエンコード、HLS / DASH / UDP TS で配信します。冗長性・SCTE-35 広告・StatMux・リアルタイムビジュアル分析を備え、放送グレードのライブ配信インフラをクラウド上で実現します。
MediaLive が解決する課題
放送品質のライブエンコーディング
- 従来は高額な放送機材(Elemental Live・Harris Infocaster)が必須だが、MediaLive でクラウドベースの放送グレード処理を実現
スケーラブルなキャパシティ管理
- スポーツシーズン・イベント期間だけの一時的な高キャパシティをスケーリングで対応
- Reserved 契約で最大 70% コスト削減
冗長性と自動フェイルオーバー
- デュアルパイプライン構成で Primary 障害時に自動切り替え
- テレビ放送に必須の高可用性を実現
マルチビットレート自動生成
- 1 ライブエンコーダーから複数品質(360p・720p・1080p)を同時出力
- デバイス・ネットワーク対応配信を効率化
複数出力先への同時配信
- MediaPackage・MediaStore・S3・直接 CDN など複数先に同時配信
- ライブ・VOD・アーカイブを並行処理
アーキテクチャ全体像
graph TB
subgraph Inputs["ライブソース"]
RTMP["RTMP/RTMPS<br/>エンコーダー"]
RTP["RTP/RTP-FEC<br/>放送機材"]
HLS_Pull["HLS Pull<br/>ライブフィード"]
SDI["SDI<br/>直結"]
MediaConnect["MediaConnect<br/>IP トランスポート"]
end
subgraph MediaLiveCore["MediaLive チャンネル"]
Input["入力管理<br/>(復路チェック)"]
Encode["リアルタイム<br/>エンコーディング"]
Multiplex["Multiplex<br/>(複数プログラム)"]
Statmux["StatMux<br/>(統計多重)"]
end
subgraph Features["処理オプション"]
ABR["マルチビットレート<br/>(H.264/H.265)"]
Captions["字幕・SCTE-35<br/>(広告マーカー)"]
Analytics["リアルタイム分析<br/>SSAI対応"]
Archive["ライブアーカイブ<br/>(S3 記録)"]
end
subgraph Outputs["出力フォーマット"]
MediaPackage["MediaPackage<br/>パッケージング"]
MediaStore["MediaStore<br/>オリジン"]
S3["S3<br/>記録"]
UDP_TS["UDP TS<br/>放送局"]
HLS["HLS Pull<br/>別拠点"]
end
subgraph Distribution["配信"]
CloudFront["CloudFront<br/>CDN"]
Players["プレーヤー<br/>(HLS.js等)"]
Broadcast["地上波/衛星"]
end
Inputs -->|RTMP/RTP/HLS| MediaLiveCore
MediaConnect -->|IP伝送| MediaLiveCore
Input -->|復路管理| Encode
Encode -->|複数品質| Multiplex
ABR -->|設定| Encode
Captions -->|埋め込み| Encode
Analytics -->|リアルタイム分析| Encode
Archive -->|S3記録| Encode
Encode -->|マルチビットレート| MediaPackage
Encode -->|HLS| MediaStore
Encode -->|TS| S3
Encode -->|UDP| UDP_TS
Encode -->|フォールバック| HLS
MediaPackage -->|DRM/DVR| CloudFront
MediaStore -->|オリジン| CloudFront
S3 -->|アーカイブ| CloudFront
UDP_TS -->|地上波| Broadcast
CloudFront -->|ライブ配信| Players
デュアルパイプライン冗長構成
sequenceDiagram
actor Source as ライブソース
participant Primary as Primary パイプライン
participant Backup as Backup パイプライン
participant Output as 出力
participant Monitor as ヘルスチェック
loop ライブ配信中
Source->>Primary: RTMP/RTP ストリーム
Primary->>Monitor: ヘルスメトリクス
Backup->>Monitor: ヘルスメトリクス
end
alt Primary 正常
Primary->>Output: H.264/H.265 エンコード
else Primary 障害検出
Monitor->>Backup: フェイルオーバー指令
Backup->>Output: H.264/H.265 エンコード
end
コアコンポーネント詳説
1. Channel(チャンネル)
ライブエンコーディングとマルチビットレート出力を管理する中核ユニット。
Channel Class
STANDARD:デュアルパイプライン(冗長化)・高可用性SINGLE_PIPELINE:単一パイプライン・コスト削減(約 50%)
パイプライン構成
- Primary / Backup 2 つのパイプライン
- Primary 障害時に自動切り替え(ヘルスチェック間隔 1-10 秒)
2. Input(入力)
複数のソースフォーマットをサポート。
入力タイプ
RTMP_PUSH:エンコーダーから RTMP で送信RTMP_PULL:MediaLive が RTMP ソースから PullRTP_PUSH:UDP/RTP で放送機材から送信HLS_PULL:HTTP Live Streaming フィードから PullSDI:物理 SDI インターフェース(AWS Elemental Live 互換)MEDIACONNECT:MediaConnect フロー入力
Input Security Group(ISG)
- CIDR 範囲でアクセス制御(IP ホワイトリスト)
- 複数ルール対応
3. InputSecurityGroup(入力セキュリティグループ)
送信元 IP アドレスを限定。
# ISG 作成例
aws medialive create-input-security-group \
--whitelist-rules '[
{"Cidr": "203.0.113.0/24"},
{"Cidr": "198.51.100.0/24"}
]'
4. Output Group(出力グループ)
複数フォーマット同時出力を管理。
出力グループタイプ
HLS_GROUP_SETTINGS:HLS プレイリスト生成(iOS・Apple TV)DASH_ISO_GROUP_SETTINGS:DASH マニフェスト(Android・Web)UDP_TS_GROUP_SETTINGS:UDP TS ストリーム(放送局向け)MEDIAPACKAGE_GROUP_SETTINGS:MediaPackage 統合RTMP_GROUP_SETTINGS:RTMP Push(CDN・別拠点)
5. Multiplex(マルチプレックス)
複数プログラムを 1 つのストリーム(MPTS)に多重化。
- 最大プログラム数:20
- 最大 MPTS ビットレート:72 Mbps
- 用途:テレビ局の複数チャンネルを 1 衛星回線で配信
6. StatMux(統計多重化)
複数プログラムのビットレートを動的に最適化。
- 各プログラムの複雑さに応じてビットレートを割り当て
- 総ビットレート固定で品質を最大化
- MPTS に含まれるプログラムのみ対応
主要ユースケース 10+
1. スポーツ放送・ライブ中継
スタジアムから複数カメラの映像を MediaLive でマルチビットレートにエンコード・配信。
- 複数カメラ → RTMP Push → MediaLive (1080p/720p/360p)
- → MediaPackage (DRM) → CloudFront → 視聴者
2. コンサート・音楽フェス配信
ステージ映像を高品質でリアルタイムエンコード。
- オンサイトエンコーダー → RTMP/RTP → MediaLive
- → HLS マルチビットレート → CloudFront (世界配信)
3. ニュース速報・緊急配信
ニュース局が即座にライブストリーム開始。
- ENG 車 / スタジオ → RTP/RTMP → MediaLive
- → MediaPackage → Web/TV 視聴者
4. 企業イベント・全社総会配信
社内・社外ステークホルダーへの同時配信。
- 会場カメラ → RTMP → MediaLive
- →認証付き HLS → 社員・投資家
5. 24/7 リニアチャンネル運用
テレビ放送局品質の継続ライブ配信。
- 多重化(Multiplex) + StatMux → MediaLive
- → MediaTailor (SSAI) → 広告挿入 → 配信
6. リージョンごとの複数配信
異なる地域向けに異なるコンテンツ・広告を同時配信。
- 1 ライブソース → MediaLive (複数出力)
- → 地域 A (日本語) / 地域 B (英語) / 地域 C (フランス語)
7. ライブ → VOD への自動化
ライブストリーム終了後、即座に VOD 資産化。
- MediaLive ライブ → MediaPackage (Live to VOD)
- → S3 → MediaConvert (VOD プロファイル) → オンデマンド配信
8. 多言語オーディオ配信
複数言語字幕・音声トラックを 1 チャンネルで運用。
- ライブソース → MediaLive (日本語・英語・フランス語音声)
- → HLS (複数オーディオトラック) → プレーヤー選択
9. SCTE-35 広告マーカー処理
ライブ配信に広告スロットを自動挿入。
- ライブ映像 + SCTE-35 マーカー → MediaLive
- → MediaPackage / MediaTailor
- → 広告サーバー (VAST) から広告取得 → SSAI
10. チアリング・直接 CDN 配信
MediaPackage 経由ではなく直接 CDN に配信。
- MediaLive → HLS → Akamai/Cloudflare
- → グローバル配信(低レイテンシー)
11. バックアップ・フェイルオーバー運用
Primary エンコーダー障害時の自動切り替え。
スタジアム Primary (RTMP)
→ MediaLive (デュアルパイプライン)
├── Primary Pipeline → 出力
└── Backup Pipeline → 待機中
↓ Primary 障害 → Backup 自動切り替え
12. リアルタイムビジュアル分析
ライブ映像から人物検出・感情分析等を実行。
- MediaLive → Kinesis Video Streams
- → Rekognition Video (人物検出)
- → CloudWatch (メトリクス)
設定・操作の具体例
AWS CLI を使用した基本的なチャンネル作成
例1: STANDARD マルチビットレート HLS チャンネル
#!/bin/bash
ENDPOINT="https://abc123.medialive.ap-northeast-1.amazonaws.com"
ROLE_ARN="arn:aws:iam::123456789012:role/MediaLiveRole"
# 1. Input Security Group 作成
ISG=$(aws medialive create-input-security-group \
--whitelist-rules '[{"Cidr": "203.0.113.0/24"}]' \
--query 'SecurityGroup.Id' --output text)
echo "Input Security Group: $ISG"
# 2. RTMP Push Input 作成
INPUT=$(aws medialive create-input \
--name live-event-input \
--type RTMP_PUSH \
--security-groups "$ISG" \
--destinations '[
{"StreamName": "live/primary"},
{"StreamName": "live/backup"}
]' \
--query 'Input.Id' --output text)
echo "Input: $INPUT"
# 3. MediaPackage 出力用の Destination 作成
# (事前に MediaPackage Channel を作成済みと想定)
MEDIAPACKAGE_CHANNEL="my-mediapackage-channel"
# 4. STANDARD チャンネル作成(デュアルパイプライン)
CHANNEL=$(aws medialive create-channel \
--name live-sports-channel \
--channel-class STANDARD \
--role-arn "$ROLE_ARN" \
--input-attachments "[{
\"InputId\": \"$INPUT\",
\"InputSettings\": {
\"DeblockFilter\": \"DISABLED\",
\"DenoiseFilter\": \"DISABLED\",
\"FilterStrength\": 1,
\"InputFilter\": \"AUTO\",
\"SourceEndBehavior\": \"CONTINUE\"
}
}]" \
--destinations "[{
\"Id\": \"mediapackage\",
\"MediaPackageSettings\": [{
\"ChannelId\": \"$MEDIAPACKAGE_CHANNEL\"
}]
}]" \
--encoder-settings '{
"VideoDescriptions": [
{
"Name": "video_1080p",
"CodecSettings": {
"H264Settings": {
"Bitrate": 5000000,
"FramerateControl": "SPECIFIED_FRAMERATE",
"FramerateNumerator": 60,
"FramerateDenominator": 1,
"GopSize": 2.0,
"Profile": "MAIN",
"RateControlMode": "QVBR",
"QvbrQualityLevel": 8
}
},
"Width": 1920,
"Height": 1080
},
{
"Name": "video_720p",
"CodecSettings": {
"H264Settings": {
"Bitrate": 2500000,
"FramerateControl": "SPECIFIED_FRAMERATE",
"FramerateNumerator": 60,
"FramerateDenominator": 1,
"GopSize": 2.0,
"Profile": "MAIN",
"RateControlMode": "QVBR",
"QvbrQualityLevel": 7
}
},
"Width": 1280,
"Height": 720
},
{
"Name": "video_360p",
"CodecSettings": {
"H264Settings": {
"Bitrate": 800000,
"FramerateControl": "SPECIFIED_FRAMERATE",
"FramerateNumerator": 30,
"FramerateDenominator": 1,
"GopSize": 2.0,
"Profile": "BASELINE",
"RateControlMode": "QVBR",
"QvbrQualityLevel": 7
}
},
"Width": 640,
"Height": 360
}
],
"AudioDescriptions": [
{
"Name": "audio_1",
"CodecSettings": {
"AacSettings": {
"Bitrate": 128000,
"SampleRate": 48000
}
},
"LanguageCode": "JPN"
}
],
"OutputGroups": [
{
"Name": "MediaPackage Output",
"OutputGroupSettings": {
"MediaPackageGroupSettings": {
"Destination": {
"DestinationRefId": "mediapackage"
}
}
},
"Outputs": [
{
"Name": "output_1080p",
"VideoDescriptionName": "video_1080p",
"AudioDescriptionNames": ["audio_1"],
"OutputSettings": {
"MediaPackageOutputSettings": {}
}
},
{
"Name": "output_720p",
"VideoDescriptionName": "video_720p",
"AudioDescriptionNames": ["audio_1"],
"OutputSettings": {
"MediaPackageOutputSettings": {}
}
},
{
"Name": "output_360p",
"VideoDescriptionName": "video_360p",
"AudioDescriptionNames": ["audio_1"],
"OutputSettings": {
"MediaPackageOutputSettings": {}
}
}
]
}
]
}' \
--query 'Channel.Id' --output text)
echo "Channel created: $CHANNEL"
# 5. チャンネル開始
aws medialive start-channel --channel-id "$CHANNEL"
echo "Channel started: $CHANNEL"
例2: StatMux + Multiplex(複数プログラム多重化)
aws medialive create-multiplex \
--name 24h-news-multiplex \
--transport-stream-bitrate 72000000 \
--multiplex-settings '{
"MaximumVideoBufferDelayMilliseconds": 1000,
"TransportStreamBitrate": 72000000,
"TransportStreamId": 1,
"TransportStreamReservedBitrate": 0
}' \
--availability-zones ap-northeast-1a ap-northeast-1c
# StatMux プログラムの追加
aws medialive create-multiplex-program \
--multiplex-id multiplex-id-xxx \
--program-name news-channel-1 \
--multiplex-program-settings '{
"ProgramNumber": 1,
"PreferredChannelPipeline": "CURRENTLY_ACTIVE",
"ServiceDescriptor": {
"ServiceName": "Channel 1",
"ServiceType": "DIGITAL_TELEVISION_SERVICE"
},
"VideoSettings": {
"StatmuxSettings": {
"MaximumBitrate": 10000000,
"MinimumBitrate": 2000000,
"Priority": 1
}
}
}'
例3: H.265 + SCTE-35 広告マーカー
aws medialive create-channel \
--name hevc-live-with-ads \
--role-arn "$ROLE_ARN" \
--input-attachments "[{
\"InputId\": \"$INPUT\"
}]" \
--encoder-settings '{
"VideoDescriptions": [{
"CodecSettings": {
"H265Settings": {
"Bitrate": 5000000,
"FramerateControl": "SPECIFIED_FRAMERATE",
"FramerateNumerator": 60,
"FramerateDenominator": 1,
"Profile": "MAIN",
"RateControlMode": "QVBR",
"QvbrQualityLevel": 9
}
},
"Width": 1920,
"Height": 1080
}],
"AudioDescriptions": [{
"CodecSettings": {
"AacSettings": {
"Bitrate": 128000
}
}
}],
"TimecodeConfig": {
"Source": "SYSTIPELINE"
},
"OutputGroups": [{
"Name": "HLS with SCTE-35",
"OutputGroupSettings": {
"HlsGroupSettings": {
"Destination": {
"DestinationRefId": "hls-output"
},
"HlsTimedMetadataSchedulingActionSourceUri": "https://ad-server.example.com/ads",
"SegmentLength": 6
}
},
"Outputs": [{
"CaptionDescriptionNames": [],
"OutputSettings": {
"HlsOutputSettings": {
"HlsSettings": {
"StandardHlsSettings": {
"AudioRenditionSets": "program_audio",
"M3u8Settings": {}
}
}
}
}
}]
}]
}'
Python SDK による動的チャンネル管理
import boto3
import json
class MediaLiveManager:
def __init__(self, region='ap-northeast-1'):
self.client = boto3.client('medialive', region_name=region)
def create_standard_channel(self, name, input_id, mediapackage_channel):
"""
STANDARD デュアルパイプラインチャンネルを作成
"""
response = self.client.create_channel(
Name=name,
ChannelClass='STANDARD',
RoleArn='arn:aws:iam::123456789012:role/MediaLiveRole',
InputAttachments=[{
'InputId': input_id,
'InputSettings': {
'DeblockFilter': 'DISABLED',
'DenoiseFilter': 'DISABLED',
'InputFilter': 'AUTO'
}
}],
Destinations=[{
'Id': 'mediapackage',
'MediaPackageSettings': [{
'ChannelId': mediapackage_channel
}]
}],
EncoderSettings={
'VideoDescriptions': [
self._create_video_description('1080p', 1920, 1080, 5000000, 8),
self._create_video_description('720p', 1280, 720, 2500000, 7),
self._create_video_description('360p', 640, 360, 800000, 7)
],
'AudioDescriptions': [{
'Name': 'audio_1',
'CodecSettings': {
'AacSettings': {
'Bitrate': 128000,
'SampleRate': 48000
}
},
'LanguageCode': 'JPN'
}],
'OutputGroups': [{
'Name': 'MediaPackage Output',
'OutputGroupSettings': {
'MediaPackageGroupSettings': {
'Destination': {
'DestinationRefId': 'mediapackage'
}
}
},
'Outputs': [
self._create_mediapackage_output('1080p'),
self._create_mediapackage_output('720p'),
self._create_mediapackage_output('360p')
]
}]
}
)
return response['Channel']['Id']
def _create_video_description(self, name, width, height, bitrate, qvbr_level):
return {
'Name': f'video_{name}',
'CodecSettings': {
'H264Settings': {
'Bitrate': bitrate,
'FramerateControl': 'SPECIFIED_FRAMERATE',
'FramerateNumerator': 60,
'FramerateDenominator': 1,
'GopSize': 2.0,
'Profile': 'MAIN' if width >= 1280 else 'BASELINE',
'RateControlMode': 'QVBR',
'QvbrQualityLevel': qvbr_level
}
},
'Width': width,
'Height': height
}
def _create_mediapackage_output(self, profile):
return {
'Name': f'output_{profile}',
'VideoDescriptionName': f'video_{profile}',
'AudioDescriptionNames': ['audio_1'],
'OutputSettings': {
'MediaPackageOutputSettings': {}
}
}
def start_channel(self, channel_id):
"""チャンネル開始"""
self.client.start_channel(ChannelId=channel_id)
print(f"Channel {channel_id} started")
def stop_channel(self, channel_id):
"""チャンネル停止"""
self.client.stop_channel(ChannelId=channel_id)
print(f"Channel {channel_id} stopped")
def describe_channel(self, channel_id):
"""チャンネルステータス確認"""
response = self.client.describe_channel(ChannelId=channel_id)
return response['Channel']
def list_channels(self):
"""全チャンネル一覧"""
response = self.client.list_channels()
return response['Channels']
# 使用例
if __name__ == '__main__':
manager = MediaLiveManager()
# チャンネル作成
channel_id = manager.create_standard_channel(
name='live-sports-channel',
input_id='input-xxx',
mediapackage_channel='mediapackage-channel-id'
)
# チャンネル開始
manager.start_channel(channel_id)
# ステータス確認
channel = manager.describe_channel(channel_id)
print(json.dumps(channel, indent=2, default=str))
CloudFormation による IaC
AWSTemplateFormatVersion: '2010-09-09'
Description: 'MediaLive Live Streaming Channel with MediaPackage Integration'
Resources:
MediaLiveRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: medialive.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/MediaLiveFullAccess'
InputSecurityGroup:
Type: AWS::MediaLive::InputSecurityGroup
Properties:
WhitelistRules:
- CidrIp: 203.0.113.0/24
- CidrIp: 198.51.100.0/24
RtmpInput:
Type: AWS::MediaLive::Input
Properties:
Name: live-event-rtmp-input
Type: RTMP_PUSH
SecurityGroups:
- !Ref InputSecurityGroup
Destinations:
- StreamName: live/primary
- StreamName: live/backup
LiveChannel:
Type: AWS::MediaLive::Channel
Properties:
Name: live-sports-channel
ChannelClass: STANDARD
RoleArn: !GetAtt MediaLiveRole.Arn
InputAttachments:
- InputId: !Ref RtmpInput
InputSettings:
DeblockFilter: DISABLED
DenoiseFilter: DISABLED
InputFilter: AUTO
Destinations:
- Id: mediapackage
MediaPackageSettings:
- ChannelId: !ImportValue MediaPackageChannelId
EncoderSettings:
VideoDescriptions:
- Name: video_1080p
CodecSettings:
H264Settings:
Bitrate: 5000000
FramerateControl: SPECIFIED_FRAMERATE
FramerateNumerator: 60
FramerateDenominator: 1
GopSize: 2
Profile: MAIN
RateControlMode: QVBR
QvbrQualityLevel: 8
Width: 1920
Height: 1080
- Name: video_720p
CodecSettings:
H264Settings:
Bitrate: 2500000
FramerateControl: SPECIFIED_FRAMERATE
FramerateNumerator: 60
FramerateDenominator: 1
Profile: MAIN
RateControlMode: QVBR
QvbrQualityLevel: 7
Width: 1280
Height: 720
- Name: video_360p
CodecSettings:
H264Settings:
Bitrate: 800000
FramerateControl: SPECIFIED_FRAMERATE
FramerateNumerator: 30
FramerateDenominator: 1
Profile: BASELINE
RateControlMode: QVBR
QvbrQualityLevel: 7
Width: 640
Height: 360
AudioDescriptions:
- Name: audio_1
CodecSettings:
AacSettings:
Bitrate: 128000
SampleRate: 48000
LanguageCode: JPN
OutputGroups:
- Name: MediaPackage Output
OutputGroupSettings:
MediaPackageGroupSettings:
Destination:
DestinationRefId: mediapackage
Outputs:
- Name: output_1080p
VideoDescriptionName: video_1080p
AudioDescriptionNames:
- audio_1
OutputSettings:
MediaPackageOutputSettings: {}
- Name: output_720p
VideoDescriptionName: video_720p
AudioDescriptionNames:
- audio_1
OutputSettings:
MediaPackageOutputSettings: {}
- Name: output_360p
VideoDescriptionName: video_360p
AudioDescriptionNames:
- audio_1
OutputSettings:
MediaPackageOutputSettings: {}
Outputs:
ChannelId:
Value: !Ref LiveChannel
Export:
Name: !Sub '${AWS::StackName}-ChannelId'
InputId:
Value: !Ref RtmpInput
Export:
Name: !Sub '${AWS::StackName}-InputId'
類似サービス比較表
| 項目 | MediaLive | IVS | Wowza Streaming Engine | NETINT | Vimeo Streaming |
|---|---|---|---|---|---|
| 提供形態 | マネージド | フルマネージド | セルフホスト / クラウド | ハードウェアエンコーダー | SaaS |
| デュアルパイプライン | ✅ | ✅ | 手動構築 | ✅ | ✅ |
| SCTE-35 対応 | ✅ | ❌ | ✅ | ✅ | ✅ |
| StatMux / Multiplex | ✅ | ❌ | ❌ | ✅ | ❌ |
| マルチビットレート | ✅ | ✅ | ✅ | ✅ | ✅ |
| H.265 / AV1 | ✅(検討中) | ✅ | ✅ | ✅ | ✅ |
| Reserved 割引 | 最大 70% | なし | ライセンス依存 | あり | あり |
| レイテンシー | 数秒 | <300ms | 可設定 | 可設定 | 可設定 |
| 放送品質 | ✅✅✅ | ✅✅ | ✅✅✅ | ✅✅✅ | ✅✅ |
| AWS 統合 | ネイティブ | ネイティブ | API | API | API |
ベストプラクティス
✅ 推奨事項
-
STANDARD デュアルパイプライン採用
- テレビ放送・重要イベントは STANDARD で冗長化
- Primary 障害時に自動フェイルオーバー
-
QVBR エンコーディング活用
- H.264 / H.265 で QVBR 設定
- 品質レベル(1-15)を業務要件に合わせて調整
-
Reserved キャパシティ活用
- 月 180 時間以上なら Reserved で 70% コスト削減
- 年間契約で安定的な配信基盤確保
-
MediaPackage との組み合わせ
- MediaLive → MediaPackage → CloudFront が標準スタック
- DRM・DVR・複数フォーマット配信を効率化
-
入力セキュリティグループ(ISG)設定
- 送信元 IP を CIDR で制限
- 不正アクセス防止
-
ライブアーカイブ設定
- S3 に同時記録で VOD 化・分析に活用
- 複雑編集なし・即時配信可能
❌ 回避すべき事項
-
SINGLE_PIPELINE で放送品質達成
- テレビ放送・重要イベントは必ず STANDARD 採用
- 単一パイプライン障害時に全体停止
-
固定ビットレート(CBR)使用
- シーンの複雑度に対応できず品質ばらつき
- QVBR 推奨
-
入力セキュリティ設定なし
- DDoS・不正送信の対象化
- ISG で送信元 IP 制限必須
-
スケーリング非対応の単一エンコーダー運用
- ピーク時容量不足・品質低下
- MediaLive で自動スケーリング活用
-
広告マーカー(SCTE-35)無視
- 広告挿入の自動化が不可
- MediaTailor と組み合わせで収益最適化
-
ライブアーカイブなし
- 緊急対応・分析・再利用機会喪失
- S3 記録を並行実施
トラブルシューティング表
| 症状 | 原因 | 対策 |
|---|---|---|
| チャンネルが RUNNING でも出力なし | 入力不安定 / Destination 設定ミス | HealthStatus 確認 / 入力 RTMP 接続テスト |
| Primary パイプライン障害で配信停止 | SINGLE_PIPELINE 運用 | STANDARD に変更 / Backup パイプライン確認 |
| フレームドロップ・遅延発生 | エンコード設定過度 / ネットワーク不安定 | GOP サイズ・ビットレート見直し |
| 音声が出力されない | AudioDescriptions 未設定 / 入力音声なし | AudioDescriptions 確認 / 入力ソース確認 |
| SCTE-35 マーカー無視される | TimecodeConfig 設定ミス | TimecodeConfig を SYSTIPELINE に設定 |
| MediaPackage に接続失敗 | Destination ID 不正 / 権限エラー | Destination 設定再確認 / IAM Role チェック |
| マルチビットレート出力ばらつき | ビットレート設定不適切 | 各解像度別に段階的設定・テスト配信 |
| Reserved キャパシティ超過 | ジョブ数制限 | キューイング機構導入 / キャパシティ増加 |
| コスト予測外に高騰 | On-Demand 継続使用 | Reserved に切り替え・キャパシティ最適化 |
2025-2026 最新動向
新機能・アップデート
-
H.265(HEVC)本格対応
- H.264 比較 50% ファイルサイズ削減
- Professional Tier で 4K HEVC 出力
-
AV1 エンコーディング検討中
- 超低ビットレート対応(H.265 比 30% 削減)
- 2026 年中盤実装予定
-
StatMux / Multiplex の拡張
- プログラム数制限の緩和(20 → 50+)
- 総ビットレート柔軟化(72 Mbps → 200 Mbps)
-
リアルタイムビジュアル分析統合
- MediaLive → Rekognition Video 直接パイプ
- 人物検出・感情分析をライブストリームから実行
-
低レイテンシーモード拡張
- 現在の数秒から <1 秒を目指す
- WebRTC・QUIC プロトコル検討
-
Reserved キャパシティの自動スケール
- 予測 ML で需要に応じた自動調整
- 無駄なキャパシティ保有削減
学習リソース・参考文献
公式ドキュメント
- AWS Elemental MediaLive - What is MediaLive?
- MediaLive Channel Configuration
- Statmux for AWS Elemental MediaLive
- MediaLive Pricing
AWS ブログ・記事
- AWS Elemental MediaLive offers statistical multiplexing
- Data-driven approach: Optimizing on-demand cost of AWS Elemental MediaLive
オープンソース・参考実装
- FFmpeg Documentation - ビデオエンコーディング基礎
- IETF SCTE-35 Specification - 広告マーカー標準
ベンダー・競合サービス比較
- Wowza Streaming Engine - セルフホスト配信
- Haivision Makito - ハードウェアエンコーダー
- Zixi Broadcaster - IP トランスポート
- AWS IVS - 低レイテンシーライブ配信
実装チェックリスト
- [ ] MediaLive IAM Role(ポリシー含め)を作成
- [ ] Input Security Group(ISG)で送信元 IP 制限設定
- [ ] RTMP / RTP / HLS Pull など入力タイプ決定
- [ ] STANDARD(冗長) or SINGLE_PIPELINE を選択
- [ ] ビットレート・フレームレート・GOPサイズ設定
- [ ] QVBR 品質レベル(1-15)を決定
- [ ] 出力グループ(MediaPackage / HLS / UDP TS)設定
- [ ] StatMux / Multiplex 検討(複数プログラム運用の場合)
- [ ] SCTE-35 広告マーカー設定(広告挿入予定の場合)
- [ ] ライブアーカイブ(S3 記録)設定
- [ ] Reserved キャパシティ契約検討(180h/月以上)
- [ ] CloudFormation / CDK で IaC 管理
- [ ] テスト配信で出力品質・延遅確認
- [ ] CloudWatch アラーム(ヘルスチェック)設定
まとめ
AWS Elemental MediaLive は、放送グレードのリアルタイムライブストリーミングエンコーディングサービス です。RTMP / RTP / HLS Pull など多様な入力、H.264 / H.265 マルチビットレート出力、デュアルパイプライン冗長化、StatMux・Multiplex による複数プログラム運用、SCTE-35 広告マーカーサポートにより、テレビ放送・スポーツ・コンサート・イベント配信をクラウドベースで実現します。MediaPackage・CloudFront・MediaTailor と組み合わせることで、完全なエンドツーエンド配信インフラを構築できます。
活用シーン:スポーツ中継・ライブコンサート・ニュース速報・イベント配信・24/7 リニアチャンネル・複数言語配信
最大のメリット:放送品質を保ちながら、スケーラブル・冗長化・自動化されたライブ配信基盤
次ステップ:MediaPackage(パッケージング)→ CloudFront(CDN)→ MediaTailor(広告挿入)でフルスタック配信
最終更新:2026-04-26 バージョン:v2.0