使用 AWS Lambda 的 Widevine HTTP 代理

Posted

技术标签:

【中文标题】使用 AWS Lambda 的 Widevine HTTP 代理【英文标题】:Widevine HTTP proxy with AWS Lambda 【发布时间】:2018-09-12 01:10:38 【问题描述】:

我正在使用 AWS Lambda + Serverless 构建 Widevine 许可证代理,并通过 Shaka Player 使用标准内容对其进行测试:https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd。 ContentKey API 工作正常,但如果我尝试使用 Lambda 端点作为带有 CENC 编码的 DRM 内容的许可证 URL,播放将失败,因为 Shaka 播放器尝试发出 CONNECT 请求,但在 Lambda 中以 Unsupported HTTP method 失败,第一个POST 请求SERVICE_CERTIFICATE 有效,第二个PAYLOAD 请求证书失败。 具体如下:

curl -H 'Host: drm.*****.com:443' -H 'Proxy-Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -X CONNECT 'https://drm.******.com'

用Charles分析流量,失败为:Client SSL handshake failed - Remote host closed connection during handshake,结果为Unsupported HTTP method

编辑: 因此,Shaka 播放器请求密钥以将资产解密为 Widevine 许可证 URL,在 Lambda 上和 API 网关后面执行。 Shaka 播放器对 service_certificate(有效负载 CAQ=)的第一个 POST 请求有效。第二个请求(来自 Shaka 播放器的许可请求)在 CONNECT 步骤被阻塞,然后连接被 API 网关的 Unsupported HTTP Method 响应关闭。

关于如何使许可证服务器工作的任何想法?

【问题讨论】:

我们需要澄清一些术语。 “Shaka 播放器尝试发出 CONNECT 请求,但在 Lambda 中失败” 你是想说在 API 网关中失败 吗?目前尚不清楚(什么,哪里)连接到(什么,哪里)和失败。 感谢@Michael-sqlbot 的回复。因此,Shaka 播放器请求密钥以将资产解密为 Widevine 许可证 URL,在 Lambda 上和 API 网关后面执行。 Shaka 播放器对 service_certificate (payload CAQ=) 的第一个 POST 请求有效。第二个请求(来自 Shaka 播放器的许可证请求)在 CONNECT 步骤中阻塞,然后连接关闭,并使用来自 API 网关的 Unsupported HTTP Method 响应。让我知道我是否可以更清楚。 【参考方案1】:

所以经过更多研究后,我发现使用 Serverless 和 AWS Lambda 无法完成,因为不支持 Shaka 播放器(例如)用于加载 CENC 内容的 HTTP 方法。

【讨论】:

以上是关于使用 AWS Lambda 的 Widevine HTTP 代理的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Lambda (NodeJS) 创建 AWS AppSync

AWS Lambda 别名简介

从 AWS API Gateway Web 界面配置 AWS Lambda 时无法选择/查看 Lambda 函数

调用 AWS Lambda Java 函数的 AWS 网关收到空正文

如何在 Lambda 函数中使用 AWS.CloudFront.Signer

使用 AWS CDK 在 AWS Codepipeline 中部署 Python Lambda 函数