【发布时间】:2018-12-07 21:14:02
【问题描述】:
我遇到了一个特殊的问题。
Server 1A 是一个与用户交互的服务器。服务器 2B、2C 和 2D 存储视频内容。
在网站上放置一个html视频标签
<video src="server1adomain.com/videos?video=Gy12C899">
每当获取此内容时,服务器 1A 上的后端脚本会确定视频存储在哪个服务器(2B、2C 或 2D)上并获取它。假设它在2B上。我不想等待整个视频从 2B 获取并存储在 1A 服务器中,然后才发送给用户。相反,我希望连续的流从 2B 流向 1A 并同时流向用户。这样,用户可以以最小的延迟获得视频的第一帧。
这个问题的标准解决方案是什么? cURL 似乎是同步的,首先 100% 获取文件,而不是转发。
看看这张图,看看我的意思:
【问题讨论】:
-
一旦1A确定了视频的位置,为什么不渲染html所以视频src=server2bdomain.com/...?不要尝试通过多个跃点进行流式传输。
-
当然,但是用户对内部的了解越少越好。我可能在这里反应过度了。此外,从最终用户的角度来看,所有 youtube 视频都托管在同一个域上,因此这必须是可能的。这是视频 src 在 youtube 上的样子
src="blob:https://www.youtube.com/a6240956-1cb5-4429-b569-309bad7a13da" -
假设 Youtube 从 youtube.com 拉取所有视频,你就错了。他们采用了许多其他流媒体平台使用的技术。播放视频时,请检查开发人员工具中的网络选项卡。内容是按时间间隔以块的形式获取的,并且从中获取块的域不是 youtube.com,而是例如
https://r3---sn-aigl6n7d.googlevideo.com/videoplayback?c=WEB&requiressl=ye...。这显然使用了 CDN,除非您想实现自己的 CDN,否则您也应该这样做。 -
哦,你是对的。对于那个很抱歉。我仍然想隐藏存储的位置。有什么方法可以通过 1 跳进行流式传输吗?我发现了这个问答stackoverflow.com/questions/38417350/…。它确实下载了视频。但不幸的是,我不能将此 file.php 用作 html 视频标签中的
src属性。 -
您担心的是用户不应该能够通过检查视频 src 来获取内容。分块提取内容的技术相当复杂,但对您来说重要的一点是请求已签名,因此无法重播。具有相同签名的相同请求将无法重复尝试。这可能包括签名生成中的当前时间戳。
标签: php