使用 HTML5 视频标签从 Google 云端硬盘流式传输视频



我正在尝试从Google云端硬盘流式传输200MB的视频文件。我已经尝试嵌入一个 24MB 的文件,该文件公开共享给所有人,这奏效了:

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

当我在浏览器中正常导航到此 URL 时,会显示一个我必须接受的安全请求。我相信这就是问题所在,因为它阻止了下载。也许我在 URL 中缺少一些参数?如何在不阻止请求的情况式传输较大的文件?

上面使用的方法仅对 100MB 或更小的文件有效。您实际上可以使用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 云端硬盘上的配额。首先,首先上传任意大小的视频文件。然后,执行以下操作:

  • 创建新相册。相应地命名它,然后拖动视频或选择已上传的现有内容。

  • 选择共享选项。在右上角,有一个共享按钮。选择它将允许您获得相册的可共享链接。确保只有您可以将视频添加到此相册至关重要。确保生成可共享链接是上述情况。

  • 获取单个视频的可共享链接。这很简单:右键单击视频并复制地址。你应该得到这样的格式: 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);
    }
    }
    

上面的代码只是从您之前获得的链接下载源代码。然后,它被逗号分割,因为提取包含video-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 云端硬盘API 允许您从网络应用程序的服务器端上传和下载到 Google 云端硬盘,甚至可以通过命令行和桌面应用程序上传和下载到您的 Google 云端硬盘。有 Python 和 .NET 支持以及有关如何设置项目的大量文档。

  • 启用 Google 云端硬盘 API。确保您已登录要从中流式传输文件的 Google 帐户。您可以访问此链接以启用 Google 云端硬盘 API。
  • 获取 API 密钥。通过访问此链接,您可以生成用于访问 Google 云端硬盘的 API 密钥。系统可能会提示您创建新项目。
  • 获取文件 ID。访问Google云端硬盘并找到您要流式传输的文件。确保它可供公众使用。在新选项卡中打开它并复制文件 ID。它应该像这样:https://drive.google.com/file/d/<YOUR_FILE_ID>/view
  • 调用下载链接。您的下载链接应采用以下格式:

https://www.googleapis.com/drive/v3/files/<YOUR_FILE_ID>?key=<YOUR_API_KEY>&alt=media

这是使用200MB文件进行测试的。下载工作完美,没有任何病毒扫描中断它。使用上面的链接并将其添加到您网站的嵌入代码中。

另一种选择

您可以使用M3U8文件来传送内容。您可以使用FFmpeg或任何类似的实用程序将视频文件拆分为较小的片段。确保每个段小于 100MB。将细分上传到Google云端硬盘并获取其可共享的链接。然后,您可以将链接更改为其可下载变体,如下所示:

https://drive.google.com/uc?id=[segment_id]

通过更改指向 Google 云端硬盘下载链接的链接来更改您的M3U8文件。然后,您可以将M3U8文件嵌入到您的网页中,如下所示:

<video width="500" height="400" controls>
<source src="video.m3u8" type="application/x-mpegURL">
</video>

但是,此方法可能并不总是有效。为了克服这个问题,您可以创建一个 Web 服务,将下载流直接提供给用户,如下所示:

[ApiController]
[Route("[controller]")]
public class SegmentController : ControllerBase
{
private static HttpClient Client { get; } = new HttpClient();
[HttpGet]
public async Task<FileStreamResult> Get(string id)
{
return new FileStreamResult(await Client.GetStreamAsync("https://drive.google.com/uc?id=" + id), new MediaTypeHeaderValue("video/MP2T"))
{
FileDownloadName = id + ".ts" // or + ".m2ts", depending on your media
};
}
}

然后,您可以将此 GET 请求称为/segment?id=[GOOGLE_DRIVE_ID]。此方法实质上将使用适当的标头将直接下载流返回到客户端,从而允许视频播放器正确流式传输播放列表。请记住,上面的示例适用于 .NET Core。

有很多关于如何从现有视频剪辑生成M3U8文件的教程。我建议FFmpeg因为创建这些文件非常简单。苹果有关于M3U8的指南,可在此处获得。由于您不是直播,因此您需要一个 VOD(视频点播)播放列表。对于大型视频,建议使用此方法。如果您不想压缩大型视频,将它们拆分并分小段交付会有所帮助,您可以使用 Google 云端硬盘托管片段(您需要将视频重新复用为.ts.m2ts,以便拆分并避免重新编码)。这也是查找和缓冲的绝佳解决方案,因为像上述解决方案这样的直接下载可能不允许您查找,并且链接也会过期。YouTube 使用类似的设置将视频传送到客户端。

我认为你不能直接使用,但是有一些像 www-drv.com 这样的服务充当代理,让你公开谷歌驱动器或OneDrive内容。

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

最新更新