当前位置: 首页 > 知识库问答 >
问题:

使用HTML5视频标签从谷歌硬盘播放视频

查宜修
2023-03-14

我试图从谷歌驱动器流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中丢失了一些参数?我如何流较大的文件没有谷歌驱动器阻止请求?

共有2个答案

空俊语
2023-03-14

我不认为你可以直接,但有像www-drv这样的服务。com作为代理,允许您公开Google Drive或OneDrive的内容。

我对他们的服务有些担心,因为FAQ有点不清楚他们需要多少访问GDrive/OneDrive的权限,不清楚你是否必须让他们从根目录下访问(这对我来说是不可能的),或者你是否可以选择一个目录(和子目录)。我过去曾给他们发过电子邮件,要求澄清,但没有回复。。。只是想提醒一下。

李文轩
2023-03-14

上面使用的方法仅对100MB或更小的文件有效。您实际上可以使用超文本标记语言5视频标记流式传输谷歌驱动器视频,而不管大小如何。我花了一段时间才弄明白,所以在这里:

>

  • 获取视频的可共享链接。这可以通过右键单击Google Drive中的视频并单击get shareable链接按钮来实现。将此链接复制到剪贴板。

    使用可共享链接查看视频。只需将上一步获得的链接粘贴到web浏览器中即可。接下来的几步请使用Firefox或Chrome。

    选择你想要的质量。使用谷歌硬盘播放器,选择你想要的品质,比如1080p或720p。单击“播放”以确保质量已更改。

    获取视频的绝对路径。有趣的部分是:右键点击视频播放器,你会看到内置菜单,里面有书呆子的循环和统计等选项。再次右键单击,您将看到浏览器内置菜单,其中包含复制视频地址或保存视频等选项。选择复制视频地址并进行测试,将其粘贴到新选项卡中,然后查看视频是否播放。

    将链接插入视频标签。这是最令人满意的部分:

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

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

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

    此外,我建议使用谷歌照片。谷歌照片允许免费存储,没有限制,因为你允许照片压缩你的视频,这样就不会耗尽你在谷歌硬盘上的配额。首先,上传任意大小的视频文件。然后,执行以下操作:

    >

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

    选择共享选项。在右上角,有一个共享按钮。选择该选项将允许您获得相册的可共享链接。确保只有您才能将视频添加到此相册中至关重要。确保generate shareable链接上的情况就是这样。

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

    上面的代码只是从您之前获得的链接下载源代码。然后,它被逗号分割,因为任何块包含视频下载。谷歌用户内容。com被提取,所有的被替换。在本例中,Internet Explorer被启动,链接被解析。结果将是Internet Explorer要求您保存视频。从这里,您可以执行以下操作:

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

    然后,您将能够流。也可以从VLC流。唯一的缺点是搜索并不总是有效的,因为从技术上讲,文件是同时下载和播放的。这种方法比谷歌硬盘容易得多。

    替代解决方案

    Google Drive API允许您从web应用程序的服务器端,甚至通过命令行和桌面应用程序上传和下载到Google Drive。还有Python和。NET支持,以及关于如何设置项目的大量文档。

    • 启用谷歌驱动API。确保您已登录到您希望从中传输文件的Google帐户。您可以访问此链接以启用Google Drive API
    • 获取API密钥。通过访问此链接,您可以生成访问Google Drive的API密钥。系统可能会提示您创建新项目
    • 获取文件ID。访问Google Drive并找到您想要传输的文件。确保向公众开放。在新选项卡中打开它并复制文件ID。它应该是这样的:https://drive.google.com/file/d/

    https://www.googleapis.com/drive/v3/files/

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

    另一种选择

    您可以使用M3U8文件来传递内容。您可以使用FFmpeg或任何类似的实用程序将视频文件分割成更小的片段。确保每个段小于100MB。将这些片段上传到谷歌硬盘上,并获得它们的可共享链接。然后,您可以像这样更改其可下载变体的链接:

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

    通过更改指向Google Drive下载链接的链接,更改您的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请求称为/段?id=[GOOGLE_DRIVE_ID].该方法将直接下载流返回给客户端,并带有适当的标题,允许视频播放器正确地流式播放列表。赤裸裸地记住,上面的例子是为了。NET Core.

    有很多关于如何从现有的视频剪辑中生成M3U8文件的教程。我推荐FFmpeg,因为创建这些文件非常简单。苹果在这里有一个关于M3U8的指南。由于您不是直播流,您将需要VOD(视频点播)播放列表。大视频推荐这种方式。如果你不想压缩你的大视频,拆分它们并在小片段中交付它们将帮助你,你可以使用谷歌驱动器来托管片段(你需要将你的视频重新编辑成. ts. m2ts以便拆分和避免重新编码)。这也是寻找和缓冲的一个极好的解决方案,因为像上面的解决方案这样的直接下载可能不允许你寻找,链接也会过期。YouTube使用类似的设置向客户端发送视频。

  •  类似资料:
    • 问题内容: 我要实现以下目标。 目的是使用户能够从他/她的硬盘驱动器中选择文件。 不上传的原因当然是传输成本和存储配额。没有理由保存文件。 可能吗? 问题答案: 可以播放本地视频文件。 通过元素选择文件时: “更改”事件被触发 从获取第一个File对象 制作指向File对象的对象URL 将对象URL设置为属性 靠后看

    • 问题内容: 我正在使用Flask提供.m3u8和.ts文件来模拟vod流。 视频播放器不会流式传输文件并显示错误(请参见下面的屏幕截图)。我找不到它是什么错误的日志。 我缺少某处的日志消息吗?是什么原因造成的,我该如何解决? 问题答案: 默认情况下,开发服务器以单线程模式运行,这意味着它一次只能处理一个请求。你一次请求两个文件流,.m3u8和.ts。你可以传递或以允许一次处理多个请求,但是,用它自

    • 我想使用html5视频标签嵌入一个视频: https://dl.dropboxusercontent.com/u/64454818/TMP/P6135199.MOV 我使用对其进行了转换: FFMPEG输出: 我尝试将其嵌入如下: 然而,Chrome不播放视频,只提供下载(和我转换视频之前一样)。Firefox也有同样的问题。 我已经测试和其他mp4文件(从我的手机)播放得很好。 有什么问题吗?我

    • 我有一个谷歌硬盘视频文件(比如https://drive.google.com/file/d/FILE_ID/view)我想要它的重定向器。谷歌视频。com链接。 像http://api.getlinkdrive.com/这样的网站是如何做到的?我尝试过使用谷歌硬盘REST应用编程接口(v2和v3),但仍然找不到方法。许多电视节目和电影网站将其内容托管在谷歌驱动器上,并使用这个过期的“隐蔽”网址,

    • 问题内容: 我发现了如何使用jquery暂停和播放视频 但是我找不到静音按钮,如果没有jquery解决方案,我只需要一个onclick js解决方案就可以了。我需要尽快。 还有解决静音延迟的方法吗?我希望它在单击按钮后立即将声音静音/取消静音。 问题答案: $(“video”).prop(‘muted’, true); //mute 和 (旁注:在jQuery <1.6中使用if)

    • 是否可以从webview播放youtube视频,就像我从浏览器访问youtube网站时视频开始播放时一样,它在全屏播放视频。 以下是我到目前为止的代码: