亚马逊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(创建源位置):
然后添加我的视频源:
或者使用 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
{ ... }
第二步是创建频道、定义频道输出和频道访问权限。
不要忘记替换您的实际 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\" } ] }"
启动频道之前的第三步也是最后一步,是添加视频源。这可以一次全部完成,也可以在观众收看流的同时动态调整。节目是一项资产和节目表中的某个时刻的组合。我可以在其他节目之前或之后的任何地方添加节目。
我也可以使用 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
{ ... }
最后,我将启动频道。费用也将从这一刻开始产生。
我可以随时调用 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 已在美国东部(弗吉尼亚北部)、美国西部(俄勒冈)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、欧洲(法兰克福)和欧洲(爱尔兰)区域开放。您可以立即开始使用。