【问题标题】:Play Google Drive Video in JW Player And Get Direct Link For Google Drive Video在 JW Player 中播放 Google Drive 视频并获取 Google Drive 视频的直接链接
【发布时间】:2021-07-27 21:15:42
【问题描述】:

【问题讨论】:

  • 我需要一个指向我的视频的直接链接,就像上面我的问题一样
  • 大部分电影网站都使用这种网址,但我不知道如何获取。
  • 当你说“需要一个指向我的视频的直接链接”时,我们需要知道这个“我的视频”的URL,否则你不能得到redirector.googlevideo.com 从无到有。
  • 这是网址drive.google.com/file/d/0B6VYU2mjTdy0WVRjb1BJUU1hYXM/view 兄弟现在该怎么办?
  • 请详细说明为什么确切地需要“redirector.googlevideo.com”链接,而不仅仅是使用文件的直接链接。我可以确定的唯一原因是您希望能够提供不同的分辨率。让我们知道您的意图是什么,也许有一个解决方案需要一些开箱即用的思考。此外,fmovies 是一个盗版网站。我认为您应该让我们相信您的合法用例。

标签: php video google-drive-api streaming


【解决方案1】:

如果您只想从 Google 驱动器流式传输视频,则可以这样做 - 您可以在此处查看一个工作示例:

您可以通过右键单击并在浏览器中检查来查看它是如何编码的

<video controls="controls" style="margin-bottom:20px;width:590px">    
         <source src="https://drive.google.com/uc?export=download&amp;id=0B0JMGMGgxp9WMEdWb1hyQUhlOWs" type="video/mp4"> 
</video>

要以编程方式为 Google 云存储创建签名 URL,您需要按照下面链接中的说明进行操作 - 我没有在此处复制或总结它们,因为如果可以采用类似的 AWS 机制,则该方法可能会经常更改并且最好经常查看最新的官方文档:

【讨论】:

  • 对不起兄弟,我的问题redirector.googlevideo.com/videoplayback?.......
  • 有一个 API api.getlinkdrive.com 会返回不同格式的驱动视频 URL,但该 API 不再工作
  • 我需要这样的 API
  • 该 URL 出现错误,因为它仅在有限的时间内有效并且已过期。一旦它被导出,我就怕你不能访问它。
  • 我知道该 URL 会在一段时间后过期,并且有 API 通过驱动器视频 ID 创建此 URL,并且想知道该 API
【解决方案2】:

您可以尝试使用此 Perl 脚本来获取直接下载链接。如果您想在 JWPlayer 中播放它,您必须从服务器运行脚本以获取链接,然后将该链接插入 HTML。

https://circulosmeos.wordpress.com/2014/04/12/google-drive-direct-download-of-big-files/

托管在 Google 云端硬盘服务中的文件可以公开共享。不过,如果它们太大,Google 页面会建议“Google Drive 无法扫描此文件中的病毒”,并要求用户确认以继续下载。

如果您出于任何原因尝试在无人参与的情况下下载文件或在资源有限的环境中下载文件,这将阻止直接使用该链接。

这是脚本

https://github.com/circulosmeos/gdown.pl

但是,脚本会将文件下载到文件系统,因此您必须在最后一个 URL 重定向时对其进行修改,您保存最终 URL 而不是下载它。

【讨论】:

    【解决方案3】:

    如果您有 WordPress Webiste,您可以使用 GD Player WordPress 插件可与 Google Drive Mp4 等配合使用。它还可以在视频中设置字幕。我使用它,它对我来说效果很好。我希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      我正在尝试这样做,我能够获取 URL,但是从服务器将其流式传输回客户端存在问题,基本上使用 puppeteer 转到 URL,单击播放按钮,等待为了让视频元素出现,获取“src”属性,然后(以某种方式通过 XMLHttpRequest)将其流式传输回服务器,然后让服务器(nodeJS)将其流式传输回客户端,然后使用该 URL 嵌入视频(尚未完成,请参阅我的 [非常谦虚] 问题了解更多信息):

      var puppeteer = require("puppeteer-core");
      var http=require("https");
      var fs=require("fs");
      var fetch=require("fetch-node");
      (async() => {
          var browser = await puppeteer.launch({
              executablePath:"./cobchrome/chrome.exe"
          });
          console.log("Got browser", browser);
          var page = await browser.newPage();
      
          console.log(page,"got page");
      
          await page.goto("https://docs.google.com/file/d/0B9aMNh1shw_4VUVVWkF0TjRHWTA/preview?enablejsapi=1&playerapiid=player4");
          console.log("went to page..");
      
      
          var newClickID = ".ndfHFb-c4YZDc";
          var clicker = await page.waitForSelector(newClickID);
      
          await page.click(newClickID);
      
          var frame = await page.waitForSelector("iframe[id=drive-viewer-video-player-object-0]");
      
      
      
      
          var cf = await frame.contentFrame();
      
          await cf.waitFor(() => !!document.querySelector("video"))
      
          var video = await cf.$("video");
      
          var videoEl = await cf.evaluate(
              v =>{
                  var result = {};
                  for(var k in v) {
                      result[k] = v[k];
                  }
                  return result;
              },
              video
          );
          var src = videoEl.src;
      
      
          await page.goto(src);
          console.log("went to video page ", src);
          var file = fs.createWriteStream("output/therebbe.mp4");
              var count = 0;
      
          page.on("console", c => {
              var txt = (c.text()),
                  buff = Buffer.from(txt,"base64");
           //   var pic = fs.createWriteStream("output/frame"+count+".png");
             // pic.write(buff);
            //  pic.end();
              console.log("Consoling ",count++, buff);
          //    file.write(buff);
          });
      
          await page.evaluate(() => {
              function _arrayBufferToBase64( buffer ) {
                  var binary = '';
                  var bytes = new Uint8Array( buffer );
                  var len = bytes.byteLength;
                  for (var i = 0; i < len; i++) {
                      binary += String.fromCharCode( bytes[ i ] );
                  }
                  return window.btoa( binary );
              }
              function str2ab(str) {
                  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
                  var bufView = new Uint16Array(buf);
                  for (var i=0, strLen=str.length; i < strLen; i++) {
                      bufView[i] = str.charCodeAt(i);
                  }
                  return buf;
              }
      
              var x = new XMLHttpRequest();
              var url = location.href;
              x.onreadystatechange = function(){
                  if(x.readyState == 200) {
                      console.log("done");
                  } else {
                      console.log(
                          _arrayBufferToBase64(
                              str2ab(x.response)
                          )
                      );
                  }
              }
            //  x.responseType="arraybuffer";
              x.open("GET",url,true);
              x.send("");
          });
      
      
      
      
      
      
      
      
       // await browser.close();
      })();
      

      【讨论】:

        【解决方案5】:

        只是一个想法:您不需要 JW 播放器或 PHP,这些天我都融入了浏览器 (HTML5)。这是一个如何做到这一点的示例(使用 Google 的 Material Design UI)。只是普通的旧 HTML/CSS/JS。

        https://github.com/rhroyston/mdl-audio

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-29
          相关资源
          最近更新 更多