You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Go AWS SDK创建AWS MediaLive通道时遇UnprocessableEntityException错误

排查AWS MediaLive CreateChannel报错"Cannot read property 'destination' of undefined"的思路

这个错误提示确实有点误导性——你明明已经在CreateChannelInput里设置了Destinations字段,但服务端却报找不到destination属性。根据我处理MediaLive API的经验,这个问题几乎都是输出组(OutputGroup)的输出配置没有正确关联到目标地址导致的,和你顶层的Destinations配置无关,下面是具体的排查步骤:

  • 第一步:给Outputs配置关联DestinationId和必要的输出设置
    你代码里的Outputs: []*medialive.Output{&medialive.Output{}}是完全空的配置,MediaLive需要知道每个输出组的输出对应到哪个目标地址(也就是你顶层Destinations里的Id),同时还要指定输出类型。修改后的代码应该类似这样:

    Outputs: []*medialive.Output{
        &medialive.Output{
            DestinationId: &destinationID, // 必须和Destinations里的Id完全匹配
            OutputSettings: &medialive.OutputSettings{
                HlsOutputSettings: &medialive.HlsOutputSettings{}, // 因为你用的是HlsGroupSettings,这里要对应Hls输出配置
            },
            // 还可以根据需要添加AudioDescriptionNames、VideoDescriptionName等关联字段
        },
    }
    

    空的Output会让服务端找不到对应的目标配置,从而抛出这个奇怪的"destination undefined"错误。

  • 第二步:验证Destinations里的Settings变量不为空
    虽然你代码里写了Url: destinationA.HlsIngest.IngestEndpoints[0].Url,但要确保这些变量不是空值。可以在调用CreateChannel前加日志打印确认:

    log.Printf("Dest A URL: %v, Username: %v", destinationA.HlsIngest.IngestEndpoints[0].Url, destinationA.HlsIngest.IngestEndpoints[0].Username)
    log.Printf("Dest B URL: %v, Username: %v", destinationB.HlsIngest.IngestEndpoints[0].Url, destinationB.HlsIngest.IngestEndpoints[0].Username)
    

    如果某个Url或Username是空的,服务端解析时会出错,间接触发这个错误提示。

  • 第三步:补全OutputGroupSettings的必填配置
    你的HlsGroupSettings只设置了HlsWebdavSettings,但缺少一些关键的必填项(比如分片长度、播放列表类型),这也可能导致服务端校验失败。建议补充基础配置:

    HlsGroupSettings: &medialive.HlsGroupSettings{
        HlsCdnSettings: &medialive.HlsCdnSettings{
            HlsWebdavSettings: &medialive.HlsWebdavSettings{},
        },
        SegmentLength: aws.Int64(10), // 分片长度,单位秒
        PlaylistType: medialive.HlsPlaylistTypeEvent, // 播放列表类型,根据你的业务场景选择
    },
    
  • 第四步:验证InputAttachment的有效性
    确保input.Input.Id是一个已经创建完成、状态正常的MediaLive Input ID,并且没有被其他通道占用。无效的Input也可能导致服务端处理请求时出现异常,返回看似不相关的错误。

  • 第五步:用AWS CLI交叉验证配置
    有时候SDK的指针类型初始化可能有隐藏问题,你可以把配置转换成AWS CLI命令手动执行,看是否能成功:

    aws medialive create-channel \
      --name "your-channel-name" \
      --role-arn "your-role-arn" \
      --input-attachments '[{"InputId": "your-input-id"}]' \
      --destinations '[{"Id": "your-dest-id", "Settings": [{"Url": "url-a", "Username": "user-a", "PasswordParam": "param1"}, {"Url": "url-b", "Username": "user-b", "PasswordParam": "param2"}]}]' \
      --encoder-settings '{"OutputGroups": [{"OutputGroupSettings": {"HlsGroupSettings": {"HlsCdnSettings": {"HlsWebdavSettings": {}}, "SegmentLength": 10, "PlaylistType": "EVENT"}, "Outputs": [{"DestinationId": "your-dest-id", "OutputSettings": {"HlsOutputSettings": {}}}]}}, {"VideoDescriptions": [{"Height": your-height, "Width": your-width, "CodecSettings": {"H264Settings": {"FramerateDenominator": your-framerate}}]}]}'
    

    如果CLI执行成功,说明是SDK代码里的字段配置问题;如果CLI也失败,就能得到更准确的错误提示,方便定位问题。

内容的提问来源于stack exchange,提问作者Galil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:25:17