获取优酷视频M3u8文件
前言
网上有很多获取优酷真实视频地址的方法,不是失效了,就是很快就被封了,以下方法模拟youku网页方式获取真实地址,十分稳定(2016/12改)
获取优酷视频链接或者ID
e.g
http://v.youku.com/v_show/id_XNjQyNjE3MjY4.html
XNjQyNjE3MjY4 就是相应地Id,至于怎样获取看你们自己了
获取M3U8文件
创建后台WebView来跟踪上面的链接以获取M3U8文件
设置WebSettings
WebSettings settings = this.getSettings();
// 支持javascript
settings.setJavaScriptEnabled(true);
// 支持localstorage和essionStorage
settings.setDomStorageEnabled(true);
// 开启应用缓存
settings.setAppCacheEnabled(true);
String cacheDir = context.getApplicationContext()
.getDir("cache", Context.MODE_PRIVATE).getPath();
settings.setAppCachePath(cacheDir);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 设置缓冲大小
settings.setAppCacheMaxSize(1024 * 1024 * 10);
settings.setAllowFileAccess(true);
settings.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");
设置WebViewClient
this.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.js_method.showSource"+
"(document.getElementsByTagName('video')[0].src);");
super.onPageFinished(view, url);
}
});
添加addJavascriptInterface
this.addJavascriptInterface(new InJavaScriptLocalObj(), "js_method");
final class InJavaScriptLocalObj {
@JavascriptInterface
public void showSource(String html5url) {
if (html5url != null) {
if (html5url.contains("type=flv")) {
html5url = html5url.replace("type=flv", "type=mp4");
} else if (html5url.contains("type=mp4")) {
} else {
html5url = html5url + "&type=mp4";
}
Message msg = new Message();
msg.obj = html5url;//这个就是M3U8文件地址
handler.sendMessage(msg);
}
}
}
剩下的就是读取m3u8文件并解析成一个视频地址列表,按次序播放,该方法ios通用
DEMO(k8pr)