以HTML 5视频标记流式传输来自Google云端硬盘的视频

时间:2017-05-09 22:21:00

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

如何从Google云端硬盘流式传输更大的(200MB)视频文件?

我做了什么。

  • 使用24MB文件进行测试,确实有效。
  • 文件在网络上为所有人共享

    <source src="https://drive.google.com/uc?export=download&id=0B0gf7RQXoPVEa0xCSEhiRG5GNHM" type="video/mp4">
    
    Oops. HTML 5 video not supported.
    

当我在浏览器中正常调用此URL时,会显示我必须接受的安全请求。

我认为这就是问题所在,它会阻止它。

是否可以发送多个export和id查询参数?

2 个答案:

答案 0 :(得分:4)

我认为您不能直接,但有www-drv.com等服务充当代理,让您公开Goog​​le云端硬盘或OneDrive内容。

我对他们的服务有一些担忧,因为常见问题解答有点不清楚他们需要多少访问GDrive / OneDrive,如果你不得不让他们从根目录访问它,这一点并不明显(这对我来说是不行的)或者你可以选择一个目录(和子目录)。我过去曾通过电子邮件向他们发送电子邮件,要求澄清,但没有回复...只是想包含这种谨慎。

答案 1 :(得分:2)

实际上,无论大小如何,您都可以使用HTML 5视频标签流式传输Google云端硬盘视频。我花了一段时间才弄清楚,所以在这里:

  • 获取视频的共享链接。这可以通过右键单击Google云端硬盘中的视频,然后单击获取共享链接按钮来完成。将此链接复制到剪贴板。
  • 通过共享链接查看视频。只需将您从上一步获得的链接粘贴到Web浏览器中。接下来的几个步骤,请使用Firefox或Chrome。
  • 选择所需的质量。使用Google云端硬盘播放器并选择所需的质量,例如1080p或720p。单击播放以确保质量已更改。
  • 获取视频的绝对路径。这是有趣的部分:右键单击视频播放器,您将看到带有菜单的内置菜单,如书呆子的循环和统计信息。再次右键单击,您将看到浏览器内置菜单,其中包含诸如复制视频地址或保存视频之类的选项。选择复制视频地址并进行测试,将其粘贴到新标签中,然后查看视频是否播放。
  • 将链接插入视频标签。这是最令人满意的部分:

    <video width="1280" height="720" controls>
        <source src="link from Google Drive" type="video/mp4" />
    </video>
    

或者,您可以使用开发人员工具中现成的网络检查工具。可以通过右键单击网页并选择检查元素,然后单击“网络”选项卡或使用内置的浏览器菜单来访问它们。您可能必须刷新页面并开始播放,然后才能在网络选项卡中播放视频。通常,它被归类为媒体,因此您可以过滤出每个引用媒体文件的请求。从那里开始,您将看到视频的链接,并能够将其复制。

  

重要的是要知道每个URL实际上都与客户端的IP相关联。这意味着您获得的链接不一定会在其他人的设备上工作。为了解决这个问题,您可以预加载页面,从中获取客户端的链接,然后获取源,并在Google云端硬盘源中搜索以fmt_map_stream开头的JSON数组。在那里,您将获得四个360p480p720p1080p的转义链接。复制这些链接,并在您的视频标签中使用它们。请记住,此过程应在服务器端进行。

此外,我建议使用Google相册。 Google相册允许无限制的免费存储空间,前提是您允许相册压缩视频,以免它们耗尽您在Google云端硬盘上的配额。首先,请先上传任意大小的视频文件。然后,执行以下操作:

  • 创建新相册。相应地命名,然后拖动视频或选择已经上传的现有内容。
  • 选择共享选项。。在右上方,有一个共享按钮。选择该选项可让您获取相册的可共享链接。 确保只有您可以将视频添加到此相册中,这一点至关重要。确保在生成可共享链接上方是这种情况。
  • 获取单个视频的共享链接。这很简单:右键单击视频并复制地址。您应该获得如下格式: https://photos.google.com/share/SomeId/photo/SomeOtherId?key=AKey
  • 从服务器端获取下载链接。以下示例是一个C#示例,该示例从上述格式的任何链接中获取下载链接:

    var source = "";
    
    using (var webClient = new WebClient())
    {
        source = webClient.DownloadString(link_from_above);
    }
    
    var chunks = source.Split(',');
    var downloadLink = "";
    
    foreach (var chunk in chunks)
    {
        if (chunk.Contains("video-downloads.googleusercontent.com"))
        {
            downloadLink = chunk.Replace("\"", string.Empty);
    
            Process.Start("iexplore.exe", downloadLink);
        }
    }
    

上面的代码只是从您先前获得的链接中下载源代码。然后,将其用逗号分隔,因为将提取包含ideo-downloads.googleusercontent.com的任何块并替换所有"。在此示例中,将启动Internet Explorer并分析链接。结果将是Internet Explorer要求您保存视频。在这里,您可以执行以下操作:

<video width="1280" height="720" controls>
    <source src="download link from source" type="video/mp4" />
</video>

您将可以流式传输。您也可以从VLC流式传输。唯一的缺点是,搜索并不总是可行的,因为从技术上来说,文件是同时下载和播放的。此方法比Google云端硬盘的方法简单得多。