【问题标题】:How to play HLS video in Android?如何在 Android 中播放 HLS 视频?
【发布时间】:2013-12-26 17:56:09
【问题描述】:

这是来自 justin.com 或 twitch.tv 这个CHANNEL的流视频
转到here 并选择任何直播,从他们那里获取 url 并添加 html://.../hls 在屏幕上出现

伙计们告诉我:

Android 很奇怪,它不能在 Android Chrome 上运行,但可以 在股票 Android 浏览器中工作(好吧,以前的股票 Android 浏览器现在 Chrome 是股票浏览器)。它也适用于所有 Safari 浏览器。

我已经实现了这段代码

stream = (WebView) findViewById(R.id.webView1);
stream.getSettings().setJavaScriptEnabled(true);
stream.getSettings().setPluginsEnabled(true);
stream.setBackgroundColor(Color.parseColor("#000000"));
stream.getSettings().setUseWideViewPort(true);
stream.setWebViewClient(new HelloWebViewClient());
stream.getSettings().setAppCacheEnabled(true);
stream.getSettings().setDomStorageEnabled(true);
stream.getSettings().setSaveFormData(true);
stream.getSettings().setLoadWithOverviewMode(true);
stream.getSettings().setUseWideViewPort(true);
stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
stream.setScrollbarFadingEnabled(false);
stream.loadUrl("http://www.twitch.tv/arteezy/hls");
stream.setVisibility(View.VISIBLE);

private class HelloWebViewClient extends WebViewClient 
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    {
        view.loadUrl(url);
        return true;
    }
}

但它会从视频中打开第一张图片并停止缓存...似乎 WebView 不缓存视频... 怎么了?

更新

后面的码流只播放了2秒就停止了

stream = (WebView) findViewById(R.id.webView1);
stream.getSettings().setJavaScriptEnabled(true);
stream.getSettings().setJavaScriptEnabled(true);

stream.getSettings().setPluginsEnabled(true);

stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

stream.setBackgroundColor(Color.parseColor("#000000"));
stream.getSettings().setUseWideViewPort(true);
// mWebView.loadUrl("data/game.swf");
//mWebViewChat.getSettings().setBuiltInZoomControls(true);
// mWebView.loadUrl("file:///android_asset/live.swf?channel=d2l");
stream.setWebViewClient(new HelloWebViewClient());
final Activity MyActivity = this;
stream.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress)   
    {
        MyActivity.setTitle("Loading...");
        MyActivity.setProgress(progress * 100); 
        if (progress*100 == 100){
            stream.clearFormData();
            stream.clearHistory();
            stream.clearCache(true);
        }

    }
});
stream.getSettings().setAppCacheEnabled(true);
stream.getSettings().setDomStorageEnabled(true);
stream.getSettings().setSaveFormData(true);

stream.getSettings().setLoadWithOverviewMode(true);
stream.getSettings().setUseWideViewPort(true);

stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
stream.setScrollbarFadingEnabled(false);
stream.clearFormData();
stream.clearHistory();
stream.clearCache(true);

stream.getSettings().setAppCacheEnabled(true);
stream.getSettings().setDatabaseEnabled(true);
stream.getSettings().setDomStorageEnabled(true);
stream.getSettings().setPluginsEnabled(true);

stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
stream.getSettings().setPluginState(PluginState.ON);
stream.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// no need I think

stream.getSettings().setLoadWithOverviewMode(true);
stream.getSettings().setUseWideViewPort(true);
stream.getSettings().setBuiltInZoomControls(true);
stream.setInitialScale(1);

stream.setWebChromeClient(new WebChromeClient());
stream.getSettings().setJavaScriptEnabled(true);

stream.getSettings().setPluginsEnabled(true);

stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

stream.setBackgroundColor(Color.parseColor("#000000"));
stream.getSettings().setUseWideViewPort(true);
// mWebView.loadUrl("data/game.swf");
//mWebViewChat.getSettings().setBuiltInZoomControls(true);
// mWebView.loadUrl("file:///android_asset/live.swf?channel=d2l");
stream.setWebViewClient(new HelloWebViewClient());
stream.getSettings().setAppCacheEnabled(true);
stream.getSettings().setDomStorageEnabled(true);
stream.getSettings().setSaveFormData(true);

stream.getSettings().setLoadWithOverviewMode(true);
stream.getSettings().setUseWideViewPort(true);

stream.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
stream.setScrollbarFadingEnabled(false);
stream.clearFormData();
stream.clearHistory();
stream.clearCache(true);

stream.getSettings().setAppCacheEnabled(true);
stream.getSettings().setDatabaseEnabled(true);
stream.getSettings().setDomStorageEnabled(true);
stream.loadUrl("http://www.twitch.tv/arteezy/hls");

【问题讨论】:

    标签: android html webview stock twitch


    【解决方案1】:

    此代码适用于我:(Android 5.1 Nexus 4)

    public class TwitchFragment extends Fragment implements View.OnClickListener {
    
    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                             final Bundle savedInstanceState) {
        final View root = inflater.inflate(R.layout.fragment_twitch, null, false);
    
        Button buttonTwitch = (Button) root.findViewById(R.id.buttonTwitch);
        buttonTwitch.setOnClickListener(this);
    
        return root;
    }
    
    @Override
    public void onClick(final View v) {
        FrameLayout layout = (FrameLayout) getView();
        assert layout != null;
        layout.removeView(v);
    
        WebView webView = new WebView(ESportLiveScoreApplication.getInstance());
    
        layout.addView(webView);
    
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setUseWideViewPort(false);
        webSettings.setDomStorageEnabled(true);
        webSettings.setSaveFormData(true);
        webSettings.setLoadWithOverviewMode(true);
    
        final WebChromeClient webChromeClient = new WebChromeClient();
    
        webView.setWebChromeClient(webChromeClient);
        webView.loadUrl("http://www.twitch.tv/h2p_gucio/hls");
    }
    }
    

    我不知道为什么,但只有当我将 WebView 放入 FrameLayout 时它才有效:)

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多