目次

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 ソースから Pull
  • RTP_PUSH:UDP/RTP で放送機材から送信
  • HLS_PULL:HTTP Live Streaming フィードから Pull
  • SDI:物理 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

ベストプラクティス

✅ 推奨事項

  1. STANDARD デュアルパイプライン採用

    • テレビ放送・重要イベントは STANDARD で冗長化
    • Primary 障害時に自動フェイルオーバー
  2. QVBR エンコーディング活用

    • H.264 / H.265 で QVBR 設定
    • 品質レベル(1-15)を業務要件に合わせて調整
  3. Reserved キャパシティ活用

    • 月 180 時間以上なら Reserved で 70% コスト削減
    • 年間契約で安定的な配信基盤確保
  4. MediaPackage との組み合わせ

    • MediaLive → MediaPackage → CloudFront が標準スタック
    • DRM・DVR・複数フォーマット配信を効率化
  5. 入力セキュリティグループ(ISG)設定

    • 送信元 IP を CIDR で制限
    • 不正アクセス防止
  6. ライブアーカイブ設定

    • S3 に同時記録で VOD 化・分析に活用
    • 複雑編集なし・即時配信可能

❌ 回避すべき事項

  1. SINGLE_PIPELINE で放送品質達成

    • テレビ放送・重要イベントは必ず STANDARD 採用
    • 単一パイプライン障害時に全体停止
  2. 固定ビットレート(CBR)使用

    • シーンの複雑度に対応できず品質ばらつき
    • QVBR 推奨
  3. 入力セキュリティ設定なし

    • DDoS・不正送信の対象化
    • ISG で送信元 IP 制限必須
  4. スケーリング非対応の単一エンコーダー運用

    • ピーク時容量不足・品質低下
    • MediaLive で自動スケーリング活用
  5. 広告マーカー(SCTE-35)無視

    • 広告挿入の自動化が不可
    • MediaTailor と組み合わせで収益最適化
  6. ライブアーカイブなし

    • 緊急対応・分析・再利用機会喪失
    • 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 最新動向

新機能・アップデート

  1. H.265(HEVC)本格対応

    • H.264 比較 50% ファイルサイズ削減
    • Professional Tier で 4K HEVC 出力
  2. AV1 エンコーディング検討中

    • 超低ビットレート対応(H.265 比 30% 削減)
    • 2026 年中盤実装予定
  3. StatMux / Multiplex の拡張

    • プログラム数制限の緩和(20 → 50+)
    • 総ビットレート柔軟化(72 Mbps → 200 Mbps)
  4. リアルタイムビジュアル分析統合

    • MediaLive → Rekognition Video 直接パイプ
    • 人物検出・感情分析をライブストリームから実行
  5. 低レイテンシーモード拡張

    • 現在の数秒から <1 秒を目指す
    • WebRTC・QUIC プロトコル検討
  6. Reserved キャパシティの自動スケール

    • 予測 ML で需要に応じた自動調整
    • 無駄なキャパシティ保有削減

学習リソース・参考文献

公式ドキュメント

AWS ブログ・記事

オープンソース・参考実装

ベンダー・競合サービス比較


実装チェックリスト

  • [ ] 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