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 驱动器流式传输视频的主要内容,如果未能解决你的问题,请参考以下文章
使用 HTML5 视频标签从 Google Drive 流式传输视频
将数据从 Google 表格流式传输到 BigQuery 以在 Tableau 中进行可视化