上面你使用的方法仅适用于小于100MB的文件。实际上,无论大小,您都可以使用HTML 5视频标签来流式传输Google Drive视频。我花了一段时间才弄清楚,所以在这里是:
获取您的视频的共享链接。这可以通过右键单击Google Drive中的视频并单击获取可共享链接按钮来完成。将此链接复制到剪贴板中。
使用共享链接查看视频。只需将从上一步获得的链接粘贴到您的Web浏览器中。请在接下来的几个步骤中使用Firefox或Chrome。
选择所需的质量。使用Google Drive播放器,并选择您想要的质量,如1080p或720p。单击播放以确保质量已更改。
获取视频的绝对路径。这是有趣的部分:右键单击视频播放器,您将看到带有循环和stats for nerds等选项的内置菜单。再次右键单击,您将看到浏览器内置菜单,其中包含复制视频地址或保存视频等选项。选择复制视频地址并进行测试,将其粘贴到新选项卡中,查看视频是否播放。
将链接插入您的视频标签中。这是最令人满意的部分:
<video width="1280" height="720" controls>
<source src="link from Google Drive" type="video/mp4" />
</video>
您可以使用开发者工具中的网络检查工具。这些工具可以通过右键单击网页并选择“检查元素”,然后点击网络选项卡,或使用内置浏览器菜单来访问。您可能需要刷新页面并开始播放视频,然后才能在网络选项卡中找到它。通常,它被归类为媒体文件,因此您可以过滤掉与媒体文件相关的每个请求。从那里开始,您将看到视频链接并能够复制它们。
重要的是要意识到每个URL实际上与客户端的IP地址相关联。这意味着您得到的链接不一定适用于其他人的设备。为了解决这个问题,您可以为客户端预加载获取链接的页面,然后获取源代码并搜索以fmt_map_stream
开头的JSON数组。在那里,您将获得四个转义链接,分别为360p
,480p
,720p
和1080p
。复制这些链接并在您的视频标记中使用它们。请记住,此过程应该从服务器端进行。
此外,我建议使用Google相册。Google相册允许免费存储,没有限制,只要您允许Photos压缩视频,以便它们不会使用Google Drive上的配额。要开始,请先上传任意大小的视频文件,然后按照以下步骤进行操作:
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 Drive更容易。
替代方案
Google Drive API允许您从Web应用程序的服务器端甚至通过命令行和桌面应用程序上传和下载到您的Google Drive。有Python和.NET支持,并且有关如何设置项目的广泛文档。
- 启用Google Drive API。 确保您已登录要从中流式传输文件的Google帐户。您可以访问 此 链接以启用Google Drive API。
- 获取API密钥。 通过访问 此 链接,您可以生成API密钥以访问Google Drive。您可能会提示创建一个新项目。
- 获取文件ID。 访问Google Drive并查找要流式传输的文件。确保它对公众可用。在新标签中打开它并复制文件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 Drive并获取其可共享的链接。然后,您可以将链接更改为它们的可下载变体,如下所示:
https://drive.google.com/uc?id=[segment_id]
通过将链接更改为Google Drive下载链接来更改您的M3U8
文件。然后,您可以像这样将M3U8
文件嵌入到Web页面中:
<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"
};
}
}
然后,您可以调用此GET请求/segment?id=[GOOGLE_DRIVE_ID]
。该方法将基本返回直接下载流到客户端,带有适当的标头,使视频播放器正确地流式传输播放列表。请记住,上面的示例适用于.NET Core。
有很多关于如何从现有视频剪辑制作M3U8
文件的教程。我建议使用FFmpeg
,因为它非常简单,可以创建这些文件。M3U8
的Apple指南在这里提供。如果您不是直播,则需要一个VOD(按需视频)播放列表。对于大型视频,推荐使用此方法。如果您不想压缩大型视频,则将其拆分并以小片段交付将对您有所帮助,并且您可以使用Google Drive来托管这些片段(您需要将自己的视频重新混合成.ts
或.m2ts
以拆分并避免重新编码)。这也是寻求和缓冲的绝佳解决方案,因为像上面的直接下载解决方案可能不允许您查找,而且链接也会过期。YouTube使用类似的设置向客户端传送视频。