我们在启用了CDN的Google Storage上提供了视频(mp4)文件。除了我们的一个用户之外,视频都是伪流(HTTP字节范围)。所有视频都具有相同的格式,由ffmpeg使用相同的参数进行编码。所有视频都来自不同地点(特别是来自美国和欧洲的测试)。
只有一位来自韩国的用户报告他无法播放某些视频,但可以很好地传输其他视频。他尝试了3种不同的设备(Windows,iPhone,Android),结果相同。他试图切换到移动网络(LTE),但仍然遇到了问题。我们不知道韩国的其他用户是否有同样的问题,我们的用户不多。
韩国的PoP或GCC节点是否有可能提供与其他地方不同的数据?是否可以测试与来自欧洲的韩国用户相同的PoP,GCC节点的HTTP请求?
更新:在与用户进行多次测试后,我们发现下载的视频(curl
)是正确的。他也有一些新视频的问题,所以问题不在于缓存。问题出现了,当视频最后有索引时,播放器必须首先寻找文件的末尾(HTTP byte-range
)。 (但并非总是如此,他最后可以用索引播放一些视频)。
答案 0 :(得分:2)
根据位置不同,数据的提供方式不同。要从远程位置发出HTTP请求,我建议使用容器启动VM实例,并在靠近您要查找的远程位置的区域中准备好VPN服务器(1)({{3 }})。在这种情况下,台湾或新加坡(2)最接近于测试您的服务。
如您所见,缓存的响应必须具有10 MB以下的正文,否则它们将不会被缓存(3)。尽管如此,该文档还提供了大文件缓存技巧,以通过云CDN互连(5)优化传出流量。 云CDN似乎不是适合视频流的服务。你能告诉我你如何通过HTTP处理后端的视频流?在响应中发送数据之前,您是否以某种方式对文件进行分区? 您还可以检查日志,查看数据是从缓存发送给用户还是从后端发送。 (4)
根据(6),唯一存储的响应是具有状态代码200/203/300等的响应以及要遵守的其他条件。通常,根据RFC 7233(5),成功的部分内容响应使用206 HTTP状态代码进行编码。这意味着Cloud CDN不会隐式支持缓存部分内容。不过,请记住,Cloud CDN确实遵守RFC 7234规范(7),因为在使用缓存时字节范围请求是可选的(“缓存可以通过创建后续范围来完成存储的不完整响应请求”)。我的观点是只缓存完整的内容响应,而“块”的请求被代理到源服务器,并且响应没有插入到缓存中。