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

  

      最近在做视频采集相关的软件,需要获得在线视频播放的真正地址。由于每家视频的对外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方法执行。

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


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


mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "js_method");//添加java script接口


具体实现过程如下


private void getPlayUriFromHtml5() {

		// mWebView.getSettings()
		// .setUserAgentString(
		// "Android Mozilla/5.0 AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30");
		// http://code.google.com/p/mofmof-js/wiki/UserAgentStrings
		Log.i(TAG, "getPlayUriFromHtml5");
		WebView mWebView;
		mWebView = new WebView(this);
		initSettings(mWebView);
		mWebView.getSettings()
				.setUserAgentString(
						"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");

		mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "js_method");//添加java script接口
		mWebView.loadUrl(playUriTemp);
	}

	@SuppressLint("SetJavaScriptEnabled")
	private void initSettings(WebView mWebView) {

		WebSettings webSettings = mWebView.getSettings();
		//开启java script的支持
		webSettings.setJavaScriptEnabled(true);

		// 启用localStorage 和 essionStorage
		webSettings.setDomStorageEnabled(true);

		// 开启应用程序缓存
		webSettings.setAppCacheEnabled(true);
		String appCacheDir = this.getApplicationContext()
				.getDir("cache", Context.MODE_PRIVATE).getPath();
		webSettings.setAppCachePath(appCacheDir);
		webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
		webSettings.setAppCacheMaxSize(1024 * 1024 * 10);// 设置缓冲大小,我设的是10M
		webSettings.setAllowFileAccess(true);

		mWebView.setWebViewClient(mWebViewClient);
	}

	private WebViewClient mWebViewClient = new WebViewClient() {

		@Override
		public void onPageFinished(WebView view, String url) {
			view.loadUrl("javascript:window.js_method.showSource(document.getElementsByTagName('video')[0].src);"); // iqiyi
			// view.loadUrl("javascript:window.js_method.showSource('<head>'+" +
			// "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
			super.onPageFinished(view, url);
		}

	};

	class InJavaScriptLocalObj {
		public void showSource(String html5url) {
			if (html5url != null && !GETHTML5_COMPLETE) {
				GETHTML5_COMPLETE = true;
				realPlayUrl = html5url;
				mEventHandler.sendEmptyMessage(GET_REALPLAYURL_COMPLETE);
			}
			Log.i("conowen", "html5url=" + html5url);
		}
	}

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

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标签。

mWebView.getSettings()
				.setUserAgentString(
						"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");



你可能感兴趣的:(Android上获取优酷(youku),土豆(tudou),乐视(letv),爱奇艺(iqiyi)等HTML5页面上的视频真正地址)