我是服务与AWS CloudFront的HLS视频。内容使用签名的Cookies进行保护。我希望用户能够使用苹果AirPlay在AirPlay设备上观看视频。具有有效cookies的经过身份验证的iOS safari客户端能够播放该视频。
如果用户随后使用AirPlay在AppleTV上观看视频,则AppleTV将从iPhone获取要查看的url,但只获取url,因此当请求没有适当的cookies头时,请求将如预期的那样以403被拒绝。
我一直在寻找文档,而这是我唯一能找到的东西(从2012年起),它似乎表明这样的事情是可能的,但在我看来,似乎缺少一些关于如何让它全部工作的关键信息。
我已经能够确定我可以在AirPlay设备上设置cookie,并且这些cookie将被返回。
我想不出的是,如何将任何类型的秘密从“共享器”传递到AirPlay设备,以及如何将其传递给服务器。如果我能够获得一个cookie、一个自定义的http头或一个附加到AirPlay设备的请求中的查询参数,那么我就可以使用AWS CloudFront Lambda来验证这个秘密,并在AirPlay设备上设置cookie。
发布于 2022-05-03 19:20:56
我也有同样的问题,并与苹果开了一张票。这是他们的反应,我最终通过我们的CDN使用了另一个解决方案,因为我们的iOS开发人员不想这样做,但认为这可能对任何仍然在处理这个问题的人都有帮助。
“”您描述的情况是,Cookie和其他自定义头信息在AirPlay会话中从iOS应用程序的Roku设备上删除,很可能是由于一个已知的架构问题。更具体地说,这样做的原因通常跨越AirPlay边界--接收方将独立于iOS设备来流请求内容,而且出于隐私原因,这不允许将自定义标头插入到请求流中。
要解决此问题,您可以考虑使用AVAssetResourceLoader的替代方案。例如,下面描述的是这样一个方案,您可以实现(或类似):
(1)当应用程序从服务器接收主播放列表URL时,它仍然可以提供cookie(通过AVURLAssetHTTPCookiesKey),但将主播放列表URL转换为具有自定义方案的URL (如vid://content--任何内容),并将其提供给AVPlayer。
(2)每当AVPlayer需要在本地播放和AirPlay之间切换时,它将从app AVAssetResourceLoader委托重新请求vid:// URL以获得主播放列表。
(3)如果会话不是AirPlay (换句话说,如果用户代理标识为iOS,而不是Apple或类似的),则应用程序将服务器提供的主播放列表URL作为重定向提供给AVAssetResourceLoader请求,然后客户端设备上的- AVFoundation将请求主播放列表URL,并一如既往地提供AVURLAssetHTTPCookies。
(4)如果会话为AirPlay,则应用程序再次调用其服务器,以获得一个一次性https“强制转换”URL,当从Apple或类似的服务器发送时,该URL将导致服务器使用令牌cookie进行响应。该应用程序提供了AVAssetResourceLoader请求的cast URL作为重定向-然后Apple将对cast URL执行一个GET操作,这将适当地提供cookie存储。
如果您决定走这个路线,有一些存档的示例代码"AVARLDelegateDemo"(参考文件/doc/uid/doc 40014357)可能会帮助您入门。此示例代码描述了AVAssetResourceLoaderDelegate (用于身份加密用例场景)的两个不同用例:-重定向处理程序(对HTTP流媒体文件重定向)--为HTTP流媒体(片段)获取加密密钥--为HTTP流自定义播放列表生成(索引文件)。“”“
发布于 2022-10-03 22:59:02
我们也有同样的问题。最后做了类似的事情:https://aws.amazon.com/blogs/networking-and-content-delivery/secure-and-cost-effective-video-streaming-using-cloudfront-signed-urls/
基本上:
https://stackoverflow.com/questions/55945320
复制相似问题