在JW播放器中播放Google Drive Video并获取Google Drive Video的直接链接

问题描述 投票:2回答:5

我想在我的网站上播放JW播放器中的谷歌驱动视频。我知道这是可能的,因为有很多网站这样做,例如fmovies

是否有任何API或代码片段,我可以通过它获得谷歌驱动器视频https://redirector.googlevideo.com/videoplayback?id=4d0be5bc491e2dd7&itag=18&source=webdrive&requiressl=yes&ttl=transient&pl=21&mime=video/mp4&ipbits=0&sparams=api,expire,id,ip,ipbits,itag,mime,mm,mn,ms,mv,pl,requiressl,source,ttl&api=FsxSHTiLgbCln6EzpdilVgW6JQxNqam8I5YPHEFLs3E=&cms_redirect=yes&expire=1499015322&ip=37.187.148.42&mm=30&mn=sn-25ge7ney&ms=nxu&mt=1499000741&mv=m&signature=658276E5F00AAFD155876EC75453507DE10DDEDB.7FAD65986F21E14B5FAFB6E145252310F86A10B6&key=cms1&app=storage的这个URL

我已经尝试了多汁的API,但它不适合我

php video google-drive-sdk streaming
5个回答
0
投票

如果您只想从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云端存储创建签名网址,您需要按照以下链接的说明进行操作 - 我没有在此复制或总结它们,因为如果类似的AWS机制可以通过,则方法可以经常更改,它是最好总是查看最新的官方文档:


0
投票

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

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

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

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

这是脚本

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

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


0
投票

如果您有WordPress网站,您可以使用GD Player WordPress插件适用于谷歌驱动器Mp4等..它还可以在视频中设置字幕。我用它,对我来说效果很好。我希望这有帮助。


0
投票

我试图这样做,我能够获取URL,但是然后有从服务器回流到客户端的问题,基本上使用puppeteer转到URL,单击播放按钮,等待视频eleemnt出现,获取“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();
})();

-1
投票

只是一个想法:你不需要JW播放器或PHP,这些天我已经全都融入了浏览器(HTML5)。以下是如何操作的示例(使用Google的Material Design UI)。只是简单的旧HTML / CSS / JS。

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

© www.soinside.com 2019 - 2024. All rights reserved.