我正在流式传输Google Drive视频,我有两种方法:
<video>
<source src="https://www.googleapis.com/drive/v3/files/videoXXX?key=APIXXX&alt=media">
</video>
或
<video>
<source src="https://drive.google.com/uc?export=download&id=videoXXX">
</video>
它们都能很好地处理小文件,但它们在永远不会超过200像素宽的div上获取全尺寸视频。我的文件从12 MB大幅度增加到88 MB。所有小于12mb的都有效,而所有大于88的都无效,所以它们之间有一个截止点。
我发现,通过实际访问具有格式的URLhttps://drive.google.com/file/d/videoXXX/view,我可以降低质量,然后右键单击并获取低分辨率文件的URL。
我还设法用file_get_contents("https://drive.google.com/file/d/videoXXX/view")
获取了那个URL并解析了结果。您可以对URL执行完全相同的操作https://docs.google.com/get_video_info?docid=videoXXX.
问题是,这个URL依赖于用户的IP地址,将其嵌入视频标签是不起作用的(复制并粘贴到浏览器中也不起作用(,因为它被锁定在服务器的IP上。
我尝试过用Ajax检索它,在iframe中加载视频并获取源,最近还尝试将服务器的IP锁定URL下载到服务器上并从那里播放。
除了最近的一个,我知道这是因为我不能做这个交叉起源,但为什么PHP能够做到呢?如何从用户的IP地址加载此页面和/或在客户端获取URL?
我知道这是因为我不能进行跨原点操作,但为什么PHP能够做到呢?
因为跨原点是在浏览器中强制执行的,而不是在服务器中。PHP忽略跨原点标头。浏览器会强制执行它们。如果不修改和重新编译浏览器源代码,就无法绕过它们。如果有办法绕过CORS,它将毫无用处,也不会存在。