http://blog.csdn.net/conowen/article/details/24027401

/********************************************************************************************
 * author:conowen@大钟                                                                                                                          
 * E-mail:conowen@hotmail.com                                                                                                             
 * http://blog.csdn.net/conowen                                                                                                              
 * 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。

********************************************************************************************/

最近在做视频采集相关的软件,需要获得在线视频播放的真正地址。由于每家视频的对外api不一样,而且每家视频的获取方式都不一样,给获取主流视频网站的真正地址带来了一定的麻烦。

随着移动互联网的发展,HTML5技术的迅速普及,现在主流在线视频播放网站都支持Html5点播技术。而且这些视频网站必须遵循HTML5的规范,这就统一了,不会写一种方式,然后用在其他的视频网站又不能工作。

支持HTML5视频的页面都会有一个video标签的。

video标签的规范如下

属性

属性 描述
autoplay autoplay 如果出现该属性,则视频在就绪后马上播放。
controls controls 如果出现该属性,则向用户显示控件,比如播放按钮。
height pixels 设置视频播放器的高度。
loop loop 如果出现该属性,则当媒介文件完成播放后再次开始播放。
muted muted 规定视频的音频输出应该被静音。
poster URL 规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。
preload preload

如果出现该属性,则视频在页面加载时进行加载,并预备播放。

如果使用 "autoplay",则忽略该属性。

src url 要播放的视频的 URL。
width pixels 设置视频播放器的宽度。

@来自互联网

实现思路:

通过Android的webview载入页面,

页面载入完毕后,执行JavaScript代码,通过javascript代码调用Android本地代码即可。

Android本地Java执行javascript代码可以直接通过webview的loadurl方法执行。

[javascript] view plaincopy print?
  1. view.loadUrl("javascript:window.js_method.showSource(document.getElementsByTagName('video')[0].src);"); // iqiyi

javascript调用Android本地java代码主要通过WebView.addJavascriptInterface();方法

[javascript] view plaincopy print?
  1. mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "js_method");//添加java script接口

具体实现过程如下

[javascript] view plaincopy print?
  1. private void getPlayUriFromHtml5() {
  2. // mWebView.getSettings()
  3. // .setUserAgentString(
  4. // "Android Mozilla/5.0 AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30");
  5. // http://code.google.com/p/mofmof-js/wiki/UserAgentStrings
  6. Log.i(TAG, "getPlayUriFromHtml5");
  7. WebView mWebView;
  8. mWebView = new WebView(this);
  9. initSettings(mWebView);
  10. mWebView.getSettings()
  11. .setUserAgentString(
  12. "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D5145e Safari/9537.53");
  13. mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "js_method");//添加java script接口
  14. mWebView.loadUrl(playUriTemp);
  15. }
  16. @SuppressLint("SetJavaScriptEnabled")
  17. private void initSettings(WebView mWebView) {
  18. WebSettings webSettings = mWebView.getSettings();
  19. //开启java script的支持
  20. webSettings.setJavaScriptEnabled(true);
  21. // 启用localStorage 和 essionStorage
  22. webSettings.setDomStorageEnabled(true);
  23. // 开启应用程序缓存
  24. webSettings.setAppCacheEnabled(true);
  25. String appCacheDir = this.getApplicationContext()
  26. .getDir("cache", Context.MODE_PRIVATE).getPath();
  27. webSettings.setAppCachePath(appCacheDir);
  28. webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
  29. webSettings.setAppCacheMaxSize(1024 * 1024 * 10);// 设置缓冲大小,我设的是10M
  30. webSettings.setAllowFileAccess(true);
  31. mWebView.setWebViewClient(mWebViewClient);
  32. }
  33. private WebViewClient mWebViewClient = new WebViewClient() {
  34. @Override
  35. public void onPageFinished(WebView view, String url) {
  36. view.loadUrl("javascript:window.js_method.showSource(document.getElementsByTagName('video')[0].src);"); // iqiyi
  37. // view.loadUrl("javascript:window.js_method.showSource('<head>'+" +
  38. // "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
  39. super.onPageFinished(view, url);
  40. }
  41. };
  42. class InJavaScriptLocalObj {
  43. public void showSource(String html5url) {
  44. if (html5url != null && !GETHTML5_COMPLETE) {
  45. GETHTML5_COMPLETE = true;
  46. realPlayUrl = html5url;
  47. mEventHandler.sendEmptyMessage(GET_REALPLAYURL_COMPLETE);
  48. }
  49. Log.i("conowen", "html5url=" + html5url);
  50. }
  51. }

网页加载完毕之后,就可以直接输出HTML5的真正播放地址了。

[java] view plaincopy print?
  1. 04-18 17:09:39.855: I/conowen(5545): http://pl.youku.com/playlist/m3u8?vid=174867986&type=mp4&ts=1397812170&keyframe=0&ep=ciGdHUGMVM8G7CLbij8bNiWzdiEHXP8N8heDhttqBtQnTey8&sid=039781216914212a9a2f8&token=3543&ctype=12&ev=1&oip=1876824509

需要注意一点的就是。浏览器的UserAgent一定要设置为移动端的浏览器ua,如iphone的,这样才可以伪装,让页面显示出HTML5的video标签。

[javascript] view plaincopy print?
  1. mWebView.getSettings()
  2. .setUserAgentString(
  3. "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D5145e Safari/9537.53");

获取优酷(youku),土豆(tudou),乐视(letv),爱奇艺(iqiyi)等HTML5页面上的视频真正地址相关推荐

  1. 通过JAVA获取优酷、土豆、酷6、6间房等视频

    为什么80%的码农都做不了架构师?>>>    通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视频地址后,能 ...

  2. JAVA获取优酷、土豆、酷6等视频实例

    通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. ...

  3. JAVA获取优酷、土豆、酷6、6间房等视频

    通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. ...

  4. 获取优酷、土豆、酷6、6间房等视频

    通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. ...

  5. 【转】通过JAVA获取优酷、土豆、酷6、6间房等视频

    通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. ...

  6. 分享:通过JAVA获取优酷、土豆、酷6、6间房等视频

    分享:通过JAVA获取优酷.土豆.酷6.6间房等视频 2011年12月27日 通过JAVA获取优酷.土豆.酷6.6间房.56视频,现在很多社会网站都有这个功能,用户输入优酷.土豆.酷6.6间房.56视 ...

  7. 优酷 youku 土豆 等视频网 视频下载

    1. 在地址栏复制你要下载的视频的网址,如http://v.youku.com/v_show/id_XMTU3NTMyMzQ0.html 2. 打开一个空白网页,在地址栏输入网址: www.kisst ...

  8. 爱奇艺、优酷、腾讯视频竞品分析报告2016(二)

    接上一篇<爱奇艺.优酷.腾讯视频竞品分析报告2016(一)> http://milkyqueen520.blog.51cto.com/11233158/1760192 2.4 产品设计与交 ...

  9. 互联网晚报 | 06月16日 星期四 | ​优酷会员涨价;微信朋友圈广告可直达天猫店;爱奇艺否认百度出售其股份...

    优酷会员价格追平腾讯爱奇艺,单月价格将调整至30元 6月15日,优酷宣布调整会员价格.6月21日零时起,月卡调整至30元.季卡78元.年卡258元,88VIP不受影响.调整后优酷会员价格追平腾讯爱奇艺 ...

最新文章

  1. 【CVPR Oral】TensorFlow实现StarGAN代码全部开源,1天训练完
  2. Linux 命令之 xargs -- 给其他命令传递参数的一个过滤器
  3. 锐浪报表数据源access_kylin+SuperSet实现实时大数据报表的快速开发
  4. 相干光通信系统的调制与解调
  5. Root cause be too many concurrent connections error could not open clinet transport with jdbc uri
  6. springboot1.5.4 log4j
  7. Java 求100以内的质数(素数)
  8. Windows下使用SSH命令登录Linux服务器
  9. 2021.12.10 vue vue-cil (12)
  10. 爬虫进阶:使用fiddler抓取手机app数据
  11. 苍狼敏捷软件开发团队建设指南-1-团队模型
  12. 用计算机唱歌 丑八怪乐谱,得力计算器乐谱丑八怪 | 手游网游页游攻略大全
  13. 【转载】详细设计说明书模板
  14. 服务器运维事项,云服务器的运维工作要注意的事项
  15. 游戏计算机的显示器,电竞显示器一般多大尺寸?玩游戏电脑显示器多大合适?...
  16. 【圣诞树代码】送她六棵圣诞树,祝她圣诞快乐~(送女朋友必备!)
  17. (转)当AI变成宣传武器:继续深扒大数据公司Cambrige Analytica
  18. mysql 数据库增量备份与恢复
  19. JAVA根据模板导出PPTX
  20. CenterNet环境配置No module named '_ext'问题

热门文章

  1. bitwarden自建服务器,自建bitwarden密码管理真香
  2. 投资开零食店谨防零食多这个骗子
  3. 个人建站过程全记录【概述】
  4. iOS Quartz2D实战系列-手把手教你手势解锁
  5. oppor15android版本8.1,OPPO R15体验:基于安卓8.1,ColorOS 5.0更好用
  6. 失败至少不会在一棵树上吊死
  7. 从广交会,看懂海尔智家逆势增长的秘密
  8. k折交叉验证 k-fold cross-validation
  9. 如何写一个健壮且高效的串口接收程序?
  10. iOS - 加解密(对称,非对称)(AES DES base64这里都有),数字签名,cookie