您的位置:首页 > 移动开发 > Android开发

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

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

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

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

video标签的规范如下

属性

属性描述
autoplayautoplay如果出现该属性,则视频在就绪后马上播放。
controlscontrols如果出现该属性,则向用户显示控件,比如播放按钮。
heightpixels设置视频播放器的高度。
looploop如果出现该属性,则当媒介文件完成播放后再次开始播放。
mutedmuted规定视频的音频输出应该被静音。
posterURL规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。
preloadpreload如果出现该属性,则视频在页面加载时进行加载,并预备播放。

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

srcurl要播放的视频的 URL。
widthpixels设置视频播放器的宽度。
@来自互联网

实现思路:

通过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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: