使用 AWS Lambda 的 Widevine HTTP 代理
Widevine HTTP proxy with AWS Lambda
我正在使用 AWS Lambda + Serverless 构建 Widevine 许可代理,并通过标准内容的 Shaka Player 对其进行测试:https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd。 ContentKey
API 工作正常,但如果我尝试使用 Lambda 端点作为许可证 URL 和 CENC 编码的 DRM 内容,播放失败,因为 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 响应。
关于如何使许可证服务器工作有什么想法吗?
所以经过更多研究,我发现使用无服务器和 AWS Lambda 无法完成,因为不支持 Shaka 播放器(例如)加载 CENC 内容所使用的 HTTP 方法。
我正在使用 AWS Lambda + Serverless 构建 Widevine 许可代理,并通过标准内容的 Shaka Player 对其进行测试:https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd。 ContentKey
API 工作正常,但如果我尝试使用 Lambda 端点作为许可证 URL 和 CENC 编码的 DRM 内容,播放失败,因为 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 响应。
关于如何使许可证服务器工作有什么想法吗?
所以经过更多研究,我发现使用无服务器和 AWS Lambda 无法完成,因为不支持 Shaka 播放器(例如)加载 CENC 内容所使用的 HTTP 方法。