如何在AWS MediaLive输入结束时停止频道?
嘿,我来帮你搞定这个问题!你现在的情况是MediaLive频道在MP4播放完后只暂停了RTMP输出,但频道本身还在运行,想要让它自动停止对吧?这里有两个方案,看你的业务场景选哪个:
方案一:直接修改MediaLive频道设置(最简单)
如果你的需求就是播放完这个MP4文件后直接停止频道,那不需要额外的Step Functions逻辑,直接调整频道的输入设置就行:
- 打开MediaLive控制台,找到你的频道,进入「输入附件」配置,把
SourceEndBehavior从CONTINUE改成END。 - 当MP4文件播放完毕时,MediaLive会自动将频道状态切换为
STOPPED,完全符合你的需求。 - 小提醒:这个设置只针对单次文件播放生效,如果后续需要复用这个频道播放其他文件,记得改回
CONTINUE或者按需调整。
方案二:通过EventBridge + Step Functions触发停止(更灵活)
如果因为业务需求必须保留SourceEndBehavior=CONTINUE,或者需要在停止频道前执行额外操作(比如清理S3文件、发送通知),那可以用这个联动方案:
步骤1:让MediaLive把状态事件发给EventBridge
- 进入MediaLive控制台的频道详情页,找到「事件通知」选项,启用EventBridge通知,确保勾选了
INPUT_LOST和CHANNEL_STANDBY这类和输入结束相关的事件类型。这样当MP4播放完频道进入输入丢失状态时,会自动发送事件到EventBridge。
步骤2:创建EventBridge规则触发Step Functions
- 打开EventBridge控制台,新建一个规则:
- 事件源选「AWS服务」,服务名称挑「MediaLive」,事件类型选「MediaLive Channel State Change」。
- 设置事件模式,匹配频道进入
INPUT_LOST状态的事件(因为你设置了SourceEndBehavior=CONTINUE,MP4播放完后频道会触发这个状态)。 - 目标选择你的Step Functions状态机(可以是现有工作流,也可以新建一个专门处理停止逻辑的子工作流)。
步骤3:在Step Functions里加停止频道的任务
在你的Step Functions工作流中,新增一个Task步骤,调用MediaLive的停止API:
- 任务资源用
arn:aws:states:::aws-sdk:medialive:stopChannel - 输入参数填写你的频道ARN,示例如下:
{ "ChannelArn": "arn:aws:medialive:us-east-1:123456789012:channel:123456" }
- 可以给这个任务加个错误处理,比如停止失败时自动重试3次,或者触发SNS告警通知运维。
步骤4:(可选)加状态校验避免误触发
如果担心其他原因导致的INPUT_LOST事件误触发停止操作,可以在停止步骤前加一个Task,调用MediaLive:DescribeChannel API,检查频道的输入状态是否确实是当前MP4文件播放完毕导致的,确认无误后再执行停止。
权限提醒
别忘了给Step Functions的执行角色加上medialive:StopChannel和medialive:DescribeChannel的权限,同时EventBridge的角色需要有触发Step Functions工作流的权限,不然会报错哦~
内容的提问来源于stack exchange,提问作者SRi
相关产品推荐
相关产品推荐

