使用Google Drive将视频流式传输到html5播放器

时间:2018-07-21 12:36:50

标签: google-drive-api html5-video httprequest

我试图使用Google Drive作为托管视频的地方,但是每当我尝试将视频用作源时,google都不会返回任何东西。 (甚至没有http响应)

视频播放器示例

<video>
  <source 
    src="https://www.googleapis.com/drive/v3/files/<file_id>/?alt=media&key=<api_key>" 
    type="video/mp4"
  />
</video>

如果我在浏览器中输入网址,它会成功提示我下载许可。

有人知道该怎么做吗?

5 个答案:

答案 0 :(得分:1)

这应该有效:

<video>
    <source src="https://drive.google.com/uc?export=download&id=file_ID" type='video/mp4'>
</video>

用您的视频ID替换链接中的“ file_ID”。 (要找到它,请右键单击Google云端硬盘视频,获取可共享的链接。应该共享该文件才能访问该文件。)

它将播放源视频。如果您想更改质量或使用不受支持的编解码器,则如前一个答案所述,获取Google驱动器流/转换后的文件并不容易。 (由于CORS和PHP在服务器端,并且Ajax不允许您获取链接,因此该链接包含IP地址,因此无法直接从客户端进行访问。)

答案 1 :(得分:1)

这是一个很长的答案,我会尽量缩短它。

  1. 将文件上传到驱动器,并使用共享选项将其公开。
  2. 然后单击预览选项,它将打开一个新标签。
  3. 在垂直的3个点(右上角)处找到一个子菜单,然后选择在新窗口中打开。
  4. 一旦进入新窗口,请单击垂直的3个点(右上角),这一次您将看到一个“嵌入项”选项。
  5. 您现在将获得iframe代码,其中包括您的网页或网站。

只需尝试一下!!! 希望这对您有所帮助!

答案 2 :(得分:1)

// This works...
<video src="https://www.googleapis.com/drive/v3/files/fileID?alt=media&key=apiKey">

// But, even better if you have access to a worker or can otherwise output the file through a script (and modify resonse headers)
async function getFile(request) {
    let response = await fetch('https://www.googleapis.com/drive/v3/files/fileID?alt=media&key=apiKey', request)
    response = new Response(response.body, response)
    response.headers.set('Accept-Ranges', 'bytes') // Allow seeking, not necessarily enabled by default
    response.headers.set('Content-Disposition', 'inline') // Disable Google's attachment (download) behaviour, display directly in browser or stick into video src instead
    return response
}
addEventListener('fetch', event => {
    event.respondWith(getFile(event.request))
})

答案 3 :(得分:0)

简短回答:

更长的答案:天哪。我花了很长时间试图自己弄清楚这一点!我正在开发一个名为DriveStream的项目,该项目旨在仅使用JavaScript和Apps Script来创建云端硬盘帐户的有组织的视频库。

项目本身运行良好,但是实现视频流并没有按计划进行。我尝试了几种不同的方法。一个类似于您的,另一个涉及获取文件的downloadUrl属性并解析下载提示页面的html,以使我可以直接链接到该文件。我可以启动该文件的下载,并且可以在网络请求中看到该文件,但是无法将其流式传输到视频容器中。

不起作用的原因是由于AJAX的限制。它可以从视频中返回数据,但是似乎没有办法将数据集中到视频容器中。

最后,我不得不通过将每个视频的“播放”按钮仅链接到预览视频来进行补偿。

https://drive.google.com/file/d/fileId/preview

这不是一个坏的解决方法,因为它可以播放您上传的任何内容的1080p编码。

答案 4 :(得分:0)

我可能回答得有点晚,但是如果有人感兴趣,我会在here之前写有关Google云端硬盘流视频的答案。有几种解决方法,但是总之,如果您不想使用Google Drive的嵌入式播放器,则必须进行一些服务器端编程(可以是ASP.NET,PHP等)。另外,如果您要流式传输的大型视频超出了100MB的限制,是否已研究HLS(HTTP实时流式传输)?您可以创建包含视频片段(最好小于100MB)的.m3u8播放列表,这样就可以流式传输视频。希望我的回答对您有帮助!