我在使用 MP4 字节范围缓存和 Apple 浏览器时遇到了一些问题。我有一个缓存节点,它从后端节点抓取内容,然后缓存它,然后将其提供给用户。这是使用 nginx proxy_pass 和 nginx 缓存完成的。
我发现许多浏览器会先请求整个视频(字节范围 0-无穷大),然后再请求块。这是一个问题,因为它会导致缓存节点一次从后端下载整个视频。为了解决这个问题,我们让缓存节点将请求拆分为 10M 块,无论请求的字节范围有多大。这适用于几乎所有浏览器,除了 Safari。对于桌面版和 iOS Safari,Safari 几乎立即抛出媒体损坏错误。只要发送请求并将字节范围设置为完整文件,就会抛出错误。如果我们不重写请求,它在 Safari 上可以正常工作,但会导致缓存节点端口几乎一直处于饱和状态,因为当有人开始流式传输文件时,整个文件都会下载到缓存节点,从而使端口饱和。任何关于如何解决这个问题的建议都将不胜感激。