Android 从 Google 驱动器流式传输视频

Posted

技术标签:

【中文标题】Android 从 Google 驱动器流式传输视频【英文标题】:Android Stream video from Google drive 【发布时间】:2015-06-18 05:58:59 【问题描述】:

我正在构建一个需要从 Google 驱动器流式传输视频的 android 应用,视频链接是这样的:https://docs.google.com/file/d/--ID--

我无法获取 rtsp,因此它无法在 videoview 中运行视频,并且它不会以 mp4 或 3gp 结尾...所以我无法那样运行它:

Intent 意图 = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("https://docs.google.com/file/d/--ID--"), “视频/mp4”); view.getContext().startActivity(intent);

我能够使用此代码在 webView 中运行视频:

webview.getSettings().setjavascriptEnabled(true); webview.getSettings().setPluginState(WebSettings.PluginState.ON); webview.loadUrl("https://docs.google.com/file/d/--ID--");

webview.setWebChromeClient(new WebChromeClient());

但是视频不能全屏播放,不能暂停,而且卡顿...

那我该怎么办?是否有从谷歌驱动器流式传输视频

【问题讨论】:

只是下载文件是一种选择吗?下载它并发送意图以使用视频播放器应用程序启动它。如果VideoView 不支持您的视频格式,那么这不是一个选择。您可以使用像ExoPlayer 这样的播放器,但您必须大幅更改您的实现,因为您不能只将驱动器网址传递给它。 当我尝试在计算机浏览器中流式传输视频时,我想在不下载文件的情况下流式传输视频我能够获得一个直接链接,我可以将其发送到使用视频播放器启动它的意图应用程序 但问题仅当我单击播放按钮时,此链接才会出现在页面 html 源代码中 【参考方案1】:

我也在尝试这个,我可以自己找到解决方案

1:确保视频网址为https://drive.google.com/file/d/VIDEO-ID/preview"

2:我从上面的网址下载网页内容并获得直接视频网址:

public String downloadUrl(String myurl) throws IOException 
        InputStream is = null;
        try 
            URL url = new URL(myurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            is = conn.getInputStream();
            String contentAsString = readIt(is);
            return contentAsString;
         finally 
            if (is != null) 
                is.close();
            
        
    

//从流输出中获取直接视频url

public String readIt(InputStream stream) throws IOException 
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) 
            if (line.contains("fmt_stream_map")) 
                sb.append(line + "\n");
                break;
            
        
        reader.close();
        String result = decode(sb.toString());
        String[] url = result.split("\\|");
        return url[1]; 
    

//我们需要一个函数来解码url以正常使用

public String decode(String in) 
        String working = in;
        int index;
        index = working.indexOf("\\u");
        while (index > -1) 
            int length = working.length();
            if (index > (length - 6)) break;
            int numStart = index + 2;
            int numFinish = numStart + 4;
            String substring = working.substring(numStart, numFinish);
            int number = Integer.parseInt(substring, 16);
            String stringStart = working.substring(0, index);
            String stringEnd = working.substring(numFinish);
            working = stringStart + ((char) number) + stringEnd;
            index = working.indexOf("\\u");
        
        return working;
    

现在使用这三个函数后,我可以得到一个直接的视频 url,它由readtIt(InputStream stream) 作为字符串返回,我可以用它来解析到 VideoView。

【讨论】:

这在服务器上有文件的情况下是否有效?就像,如果我的视频存储在服务器上,并且我以上述字符串格式发送文件,并在我的 VideoView 中解析它,它会工作吗? 以上代码仅适用于谷歌驱动器中的视频商店 这只是一种黑客行为。谷歌已经改变了他们的标记,所以它停止工作

以上是关于Android 从 Google 驱动器流式传输视频的主要内容,如果未能解决你的问题,请参考以下文章

从 Google App Engine 流式传输音频

从 Google 云存储中移动/流式传输数据

使用 HTML5 视频标签从 Google Drive 流式传输视频

将数据从 Google 表格流式传输到 BigQuery 以在 Tableau 中进行可视化

使用Tornado将二进制文件流式传输到Google Storage

如何使用 Windows Media Player 从 Google Drive 流式传输视频?