android獵豹瀏覽器可以播放各個網站的視頻,為什麼調用WebView不能播放?如何實現?

webview可以播放優酷的視頻,新浪、56等網站好像都不能正常播放,系統自帶的瀏覽器不能播放,獵豹可以,請問如何實現的?

補充:
1)UC瀏覽器可以直接播放,不用啟動單獨播放器,直接在flash里就可以。
同樣是flash插件為什麼uc可以直接播放,有的瀏覽器,尤其是系統自帶的瀏覽器為什麼做不到?


就是通過視頻網址 解析出真實的 播放地址, 2012年的時候, 這項技術還算是很新的, 屬於視頻聚合軟體中比較核心的功能, 那時候開發這個很多公司都是要簽保密協議的.

具體用什麼語言實現 各種語言都是可以的啊, 反駁一下有人說不能用js來做.

現在其實很常見了, 各種視頻聚合軟體, 盒子軟體, 大多都是用這樣的方式做的. 具體抓取的細節就不多贅述了.

授人魚不如授人漁
如果你也想做的話, 可以看下 媽媽再也不用擔心我的macbook發燙了計劃2.0Beta 這個Chrome 插件, 追一下源碼, 你就會發現一個js文件, 然後你js文件下載下來, 自己研究就成.

Java - 通過優酷網視頻播放網址解析出Mp4格式的單個文件 這是我當時摳出來的優酷的方法, 現在好像失效的了, 你可以如法炮製一下.

當然現在github上應該有很多開源的項目了, 不用這麼麻煩了, 你可以自己去搜索一下.


謝邀
首先,獵豹瀏覽器的網路視頻播放部分是交給第三方去做的[1]
然後,獵豹的做法是通過JS來提取頁面上的播放視頻原地址,然後把地址放到自己的播放器裡面去播放,具體js文件大家可以通過解包獵豹瀏覽器的apk找到
所以樓主如果想和獵豹做一樣的事情的話,要先從研究獵豹的js文件開始

以上

針對@一隻阿怪 的質疑:

仔細看這些js會發現,有些是調API,有些是做了些Trick模擬Flash播放器請求,各有各的辦法
[1]Vitamio - Android 與 iOS 平台最專業的多媒體開發框架


把useragent改為手機端的,手機網頁才支持播放,flash一般不支持


不贊成Bill Cheng的答案
因為在移動瀏覽器端,視頻播放是移動瀏覽器端的一個大的市場,而獵豹對現在手機端視頻的解析,並不是用js去分析視頻文件路徑。
移動端,安卓原生並不支持flash,而很多視頻網站,都對手機大部分有HTML播放,只要支持HTML5的瀏覽器,就並不需要用獵豹這種第三方瀏覽器去解析並播放,原生瀏覽器也能做到。
那麼獵豹是怎麼解析的呢,那就是曲線救國。
獵豹收集了大部分的視頻網站,並自己解析出視頻介面,來實現移動端的視頻播放功能。

流程就是
1.收集視頻網站列表
2.分析出視頻播放的介面
3.當移動端瀏覽器訪問該視頻網站的時候,獵豹會直接去調用該視頻網站的API,得到視頻文件的URL
4.某些特殊網站,會將網站URL發送到獵豹伺服器,獵豹雲端解析後,返回視頻文件URL。
5.用獵豹自帶的解碼器播放該視頻。

這種方法是最笨,也是最簡單的方法,能夠把很多不支持HTML5的視頻網站,實現手機端的播放。

如果真的像樓上說的,用js文件去解析,那麼,你可以自己做個測試,自己搭建一個網站,用第三方flash來做視頻播放,那麼獵豹將無法解析。而插入第三方flash的代碼里,有明文的視頻文件地址,所以,js解析視頻地址是不成立的。


之前抓包分析過iOS端獵豹瀏覽器
首先當你點擊某視頻地址的時候,瀏覽器是能夠得知URL的。然後獵豹瀏覽器請求了一個自己的API,把地址解析成真實的視頻文件地址,然後調用自己的播放器來播放這個視頻文件。

抓包的截圖:

把返回的json數據序列化

可以看到,這裡請求的是獵豹的介面,獲取的json文件實際就是視頻的M3U8地址,獲取到M3U8地址之後,就可以調用獵豹的視頻播放器來播放M3U8視頻了。

實際上獵豹只是比普通的webview多做了一步,就是解析視頻的M3U8地址,得到了M3U8地址就可以使用自己的播放器來播放視頻了。


我曾經寫過一個包含WebView的Android應用,剛剛又特意打開新浪和56驗證了一下,事實上他們都是可以基於HTML5正常播放的,
只是要記得加上
setJavaScriptEnabled(true);
和setDomStorageEnabled(true);

DEMO:
MainActivity.class

public class MainActivity extends ActionBarActivity {

public WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
}

protected void initUI()
{
// Initialize the WebView if necessary
if (webView == null)
{
// Create the webView
webView = (WebView)findViewById(R.id.myWebView1);

WebSettings settings = webView.getSettings();
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setUseWideViewPort(true);
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
// 應用可以有緩存
settings.setAppCacheEnabled(true);

webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl("file:///android_asset/htmlbundle/homepage.html");
}
}

final class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {

return super.shouldOverrideUrlLoading(view, url);
}
}
}

測試機型:NEXUS7 2012
Android 5.0


1. 獵豹瀏覽器的視頻播放用了第三方的解決方案,如上海改變科技公司等等的sdk進行播放
2. 直接取視頻網站的視頻地址,然後用上述sdk進行播放,這個服務也是第三方解決方案,這個公司的名字忘記了,是個廣東公司

如果自己要做這種服務,就比較麻煩了。


推薦閱讀:

2014 年買魅族 MX2 還行嗎?
蘋果會和魅族合作么?
如何評價魅藍 note2 和紅米 note2?
魅族 Flyme 為什麼不再內置 Google 服務相關組件?
感覺Flyme真的很難用,想聽聽大家的看法?

TAG:視頻 | AdobeFlash | WebKit | Android | 獵豹瀏覽器 |