cheetsheet/ip

MediaPackage を CLI から操作

チャンネル名にユニークな文字列が必要、また、この文字列は MediaPackage でチャンネルを作る際に Destination で設定する必要がある チャンネルは aws cli のオプションで作成できる。 配信に必要なチャンネルは( MediaLive 側で 2 つの Destination を指定する必要があるので )2 つ設定する 2 つのチャンネルのパスワードは EC2 パラメータストアにすぐ保存する( MediaLive の仕様でパスワードは EC2 パラメータストアを参照する)

export DATE=$(date +%Y%m%d%H%M)

export MPACK_C_A=$( aws mediapackage create-channel  --region ap-southeast-1  --id "${DATE}-a" )
export MPACK_C_A_URL=$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Url')
export MPACK_C_A_USER=$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Username')
aws ssm put-parameter --region ap-southeast-1 --name "/medialive/${MPACK_C_A_USER}" --value "$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Password')" --type SecureString

export MPACK_C_B=$( aws mediapackage create-channel  --region ap-southeast-1  --id "${DATE}-b" )
export MPACK_C_B_URL=$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Url')
export MPACK_C_B_USER=$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Username')
aws ssm put-parameter --region ap-southeast-1 --name "/medialive/${MPACK_C_B_USER}" --value "$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Password')" --type SecureString

MediaPackageでエンドポイントを作成する

ひとつWebUIからエンドポイントを作成して雛形にする(スケルトンは設定項目が多すぎ) 一応、スケルトンは

 aws mediapackage create-origin-endpoint --generate-cli-skeleton  | less

で確認できる。が、簡単にWebUIで作ったものを参考に値を決める。

aws mediapackage list-origin-endpoints --region ap-southeast-1 --channel-id チャンネルID
{
    "OriginEndpoints": [
        {
            "ChannelId": "20171207-b",
            "TimeDelaySeconds": 0,
            "Whitelist": [],
            "StartoverWindowSeconds": 0,
            "Url": "https://de623a8b9bacb203.mediapackage.ap-southeast-1.amazonaws.com/out/v1/2604298945794f3c90e13f73f334af8d/index.m3u8",
            "Arn": "arn:aws:mediapackage:ap-southeast-1:139332511982:origin_endpoints/2604298945794f3c90e13f73f334af8d",
            "HlsPackage": {
                "StreamSelection": {
                    "MaxVideoBitsPerSecond": 2147483647,
                    "StreamOrder": "ORIGINAL",
                    "MinVideoBitsPerSecond": 0
                },
                "PlaylistType": "EVENT",
                "PlaylistWindowSeconds": 5,
                "UseAudioRenditionGroup": false,
                "ProgramDateTimeIntervalSeconds": 0,
                "SegmentDurationSeconds": 1,
                "AdMarkers": "NONE",
                "IncludeIframeOnlyStream": false
            },
            "Id": "20171207-b",
            "ManifestName": "index"
        }
    ]
}

こうなった。 エンドポイントA

export MPACK_C_A_ENDPOINT=$(cat <<EOS
{
    "ChannelId": "${DATE}-a",
    "Description": "",
    "HlsPackage": {
        "AdMarkers": "NONE",
        "IncludeIframeOnlyStream": false,
        "PlaylistType": "EVENT",
        "PlaylistWindowSeconds": 5,
        "ProgramDateTimeIntervalSeconds": 0,
        "SegmentDurationSeconds": 1,
        "StreamSelection": {
            "MaxVideoBitsPerSecond": 2147483647,
            "MinVideoBitsPerSecond": 0,
            "StreamOrder": "ORIGINAL"
        },
        "UseAudioRenditionGroup": false
    },
    "Id": "${DATE}-a",
    "ManifestName": "index",
    "StartoverWindowSeconds": 0,
    "TimeDelaySeconds": 0,
    "Whitelist": []
}
EOS)

エンドポイントB

export MPACK_C_B_ENDPOINT=$(cat <<EOS
{
    "ChannelId": "${DATE}-b",
    "Description": "",
    "HlsPackage": {
        "AdMarkers": "NONE",
        "IncludeIframeOnlyStream": false,
        "PlaylistType": "EVENT",
        "PlaylistWindowSeconds": 5,
        "ProgramDateTimeIntervalSeconds": 0,
        "SegmentDurationSeconds": 1,
        "StreamSelection": {
            "MaxVideoBitsPerSecond": 2147483647,
            "MinVideoBitsPerSecond": 0,
            "StreamOrder": "ORIGINAL"
        },
        "UseAudioRenditionGroup": false
    },
    "Id": "${DATE}-b",
    "ManifestName": "index",
    "StartoverWindowSeconds": 0,
    "TimeDelaySeconds": 0,
    "Whitelist": []
}
EOS)

エンドポイントを作成する

aws mediapackage create-origin-endpoint --cli-input-json "${MPACK_C_A_ENDPOINT}"
aws mediapackage create-origin-endpoint --cli-input-json "${MPACK_C_B_ENDPOINT}"

ビデオに取りつつ配信する

下記の環境変数に入っている値の場所にRTMPで動画データを送り込む $M_INPUT_INPUT_A $M_INPUT_INPUT_B

$ echo $M_INPUT_INPUT_A $M_INPUT_INPUT_B
rtmp://52.74.2.93:1935/a rtmp://52.221.110.47:1935/b

MediaPackageの管理画面でライブを確認する

WebUIでMediaPackageを開き、[ Channels ]->[ 作成したチャンネル ]->画面中ほどの[ Endpoints ]->[ Preview ]をクリック