亚马逊AWS官方博客

如何将 Channel Assembly 与 AWS Elemental MediaTailor 结合使用以从现有的源启动虚拟频道

如果您是广播公司或开放式互联网流媒体(Over-the-Top,OTT)频道运营商,现在可以将多个现有点播源的节目集中起来,然后混合到线性播放列表中,从而创建虚拟频道。

过去,由于为了适合在线流式处理而进行媒体转码的成本高昂,加上发现和管理目录中的现有媒体十分复杂,为较小的受众群体(例如基于兴趣或区域偏好的观众类别)创建自定义频道的成本极其昂贵。

AWS Elemental MediaTailor Channel Assembly 现在允许您创建静态或动态的播放列表,通过重复使用现有目录中已经转码的视频片段,将内容流式传输给观众,而不再需要重新对源内容进行转码以进行多区域或观众排列。

您可以选择多种不同的调度方案(例如循环内容),也可以手动将节目动态添加到节目表中,或通过插入推荐引擎提供的节目队列来添加。您还可以使用智能节目感知规则来安排广告时间。

如何开始使用 AWS Elemental MediaTailor
假设我想使用我已经拥有的内容,通过组建一个 HLS 和一个 DASH 打包流来创建一个新的流频道。内容必须按类似的特征进行编码和打包,例如在每个级别具有相同的比特率等级数和相同的参数(编解码器、分辨率、帧速率等)。我可以使用 AWS Elemental MediaConvert 来准备内容并将其存储在 Amazon Simple Storage Service (S3) 上。支持的源格式包括 HLS、DASH 和 CMAF(带 HLS 和 DASH 清单)。在此例中,内容将通过我的 CDN 分发;因此毫不意外,我会使用 Amazon CloudFront

第一步是定义我的内容源,并注册我想要包含在节目表中的每个资产。在 AWS Elemental MediaTailor 控制台的 Channel Assembly 下,我单击 Create source location(创建源位置):

Elemental Channel Assembly – 创建源位置

然后添加我的视频源:

MediaTailor Channel Assembly 添加视频点播源

或者使用 AWS 命令行界面 (CLI)

# Create a Source Origin
aws mediatailor create-source-location \
    --source-location-name NewsBlogSourceLocation
    --http-configuration \
           BaseUrl=https://dyye954rrfxy8.cloudfront.net // <-- this is my CloudFront distribution DNS name
{
    "Arn": "arn:aws:mediatailor:us-west-2:1234567890:sourceLocation/NewsBlogSourceLocation",
    "CreationTime": 1614660822156,
    "HttpConfiguration": {
        "BaseUrl": "https://dyye954rrfxy8.cloudfront.net"
    },
    "LastModifiedTime": 1614660822156,
    "Name": "NewsBlogSourceLocation"
}		   

# Register two video assets
aws mediatailor create-vod-source \
    --source-location-name NewsBlogSourceLocation \
    --vod-source-name MyFirstVodSource \
    --http-package-configurations \
        Id=hls,Path=/out/v1/24247f7e7f2942509058713671dce466/209b7701f2224791a9a44440e6e5b9e0/e2fdd7d6ae5f4e41ac57089be4de2d02/index.m3u8,SourceGroup=hls,Type=HLS \
        Id=cmaf,Path=/out/v1/24247f7e7f2942509058713671dce466/d71309185897405383031fd7d4515198/8901ed3df0e842c99fd8523c5b935d2f/index.m3u8,SourceGroup=cmaf,Type=HLS
{
    "Arn": "arn:aws:mediatailor-gamma:us-west-2:898676505562:vodSource/NewsBlogSourceLocation/MyFirstVodSource",
    "CreationTime": 1614661120839,
    "HttpPackageConfigurations": [
        {
            "Id": "hls",
            "Path": "/out/v1/24247f7e7f2942509058713671dce466/209b7701f2224791a9a44440e6e5b9e0/e2fdd7d6ae5f4e41ac57089be4de2d02/index.m3u8",
            "SourceGroup": "hls",
            "Type": "HLS"
        },
        {
            "Id": "cmaf",
            "Path": "/out/v1/24247f7e7f2942509058713671dce466/d71309185897405383031fd7d4515198/8901ed3df0e842c99fd8523c5b935d2f/index.m3u8",
            "SourceGroup": "cmaf",
            "Type": "HLS"
        }
    ],
    "LastModifiedTime": 1614661120839,
    "Name": "MyFirstVodSource",
    "SourceLocationName": "NewsBlogSourceLocation"
}

aws mediatailor create-vod-source \
    --source-location-name NewsBlogSourceLocation \
    --vod-source-name MySecondVodSource \
    --http-package-configurations \
        Id=hls,Path=/out/v1/5bc2c7b8a384403681222f703c6dd3ee/209b7701f2224791a9a44440e6e5b9e0/e2fdd7d6ae5f4e41ac57089be4de2d02/index.m3u8,SourceGroup=hls,Type=HLS \
        Id=cmaf,Path=/out/v1/5bc2c7b8a384403681222f703c6dd3ee/d71309185897405383031fd7d4515198/8901ed3df0e842c99fd8523c5b935d2f/index.m3u8,SourceGroup=cmaf,Type=HLS

{ ... } 

第二步是创建频道、定义频道输出和频道访问权限。

MediaTailor Channel Assembly 创建频道步骤 1

MediaTailor Channel Assembly 创建频道步骤 2

MediaTailor Channel Assembly 创建频道步骤 3

不要忘记替换您的实际 AWS 账户 ID 和 AWS 区域名称。

您可以使用 CLI 将上述操作自动化:

# Create the channel
aws mediatailor create-channel \
    --channel-name NewsBlogChannel \
    --playback-mode LOOP \
    --outputs \
        HlsPlaylistSettings={ManifestWindowSeconds=30},ManifestName=index,SourceGroup=hls  \
        HlsPlaylistSettings={ManifestWindowSeconds=30},ManifestName=cmaf,SourceGroup=cmaf

{ ... } 

# define the channel access permissions
# do not forget to replace *MY ACCOUNT ID* with your actual AWS Account ID.Also adjust the AWS Region name.
aws mediatailor put-channel-policy \
    --channel-name NewsBlogChannel \
    --policy "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"AllowAnonymous\", \"Effect\": \"Allow\", \"Principal\": \"*\", \"Action\": \"mediatailor:GetManifest\", \"Resource\": \"arn:aws:mediatailor:us-west-2:*MY ACCOUNT_ID*:channel/NewsBlogChannel\" } ] }"

启动频道之前的第三步也是最后一步,是添加视频源。这可以一次全部完成,也可以在观众收看流的同时动态调整。节目是一项资产和节目表中的某个时刻的组合。我可以在其他节目之前或之后的任何地方添加节目。

MediaTailor Channel Assembly 创建程序

我也可以使用 CLI 将上述操作自动化:

aws mediatailor create-program \
    --channel-name NewsBlogChannel \
    --schedule-configuration "Transition={Type=RELATIVE,RelativePosition=AFTER_PROGRAM}" \
    --program-name MyFirstProgram \
    --vod-source-name MyFirstVodSource \
    --source-location NewsBlogSourceLocation
{
    "AdBreaks": [],
    "Arn": "arn:aws:mediatailor:us-west-2:1234567890:program/NewsBlogChannel/MyFirstProgram",
    "ChannelName": "NewsBlogChannel",
    "CreationTime": 1614661735435,
    "LastModifiedTime": 1614661735435,
    "Name": "MyFirstProgram",
    "SourceLocationName": "NewsBlogSourceLocation",
    "VodSourceName": "MyFirstVodSource"
}

aws mediatailor create-program \
    --channel-name NewsBlogChannel \
    --schedule-configuration "Transition={Type=RELATIVE,RelativePosition=AFTER_PROGRAM,RelativeProgram=MyFirstProgram}" \
    --program-name MySecondProgram \
    --vod-source-name MySecondVodSource \
    --source-location NewsBlogSourceLocation 
{ ... }	

最后,我将启动频道。费用也将从这一刻开始产生。

MediaTailor Channel Assembly 启动频道

我可以随时调用 describe-channel 来获取频道终端节点;每个输出格式一个。

aws mediatailor start-channel \
    --channel-name NewsBlogChannel

aws mediatailor describe-channel \
    --channel-name NewsBlogChannel

{
    "Arn": "arn:aws:mediatailor:us-west-2:1234567890:channel/MyFirstChannel",
    "ChannelState": "RUNNING",
    "CreationTime": 1613709143819,
    "Name": "MyFirstChannel",
    "Outputs": [
        {
            "HlsPlaylistSettings": {
                "ManifestWindowSeconds": 30
            },
            "ManifestName": "index",
            "PlaybackUrl": "https://abc123.pdx-0.egress.channel-assembly.elemental.aws.dev/v1/channel/NewsBlogChannel/index.m3u8",
            "SourceGroup": "hls"
        },
        {
            "HlsPlaylistSettings": {
                "ManifestWindowSeconds": 30
            },
            "ManifestName": "cmaf",
            "PlaybackUrl": "https://abc123.pdx-0.egress.channel-assembly.elemental.aws.dev/v1/channel/NewsBlogChannel/cmaf.m3u8",
            "SourceGroup": "cmaf"
        }
    ],
    "PlaybackMode": "LOOP"
}

我可以在兼容的客户端中打开终端节点,从而测试我的频道,例如现代网络浏览器(我用 Safari 对其进行了测试)或 ffplay文档中包含更多高级示例,包括如何添加广告时间或如何创建 CloudFront 配置,从而一键式分发您的流。

如果您在您 AWS 账户上执行了上述命令,请不要忘记在测试后停止频道,以避免产生费用。

与以往一样,您无需预付任何费用,只需为您使用的服务付费。点播资产的定价为每个频道小时 0.10 美元起。如果您全天候运行频道,费用将为每个频道月 73 美元。

AWS Elemental MediaTailor Channel Assembly 已在美国东部(弗吉尼亚北部)美国西部(俄勒冈)亚太地区(新加坡)亚太地区(悉尼)亚太地区(东京)欧洲(法兰克福)欧洲(爱尔兰)区域开放。您可以立即开始使用