2013-12-09 150 views
3

这里是justin.com或twitch.tvCHANNEL
转到here流视频,并选择任何现场直播,从他们那里得到的网址,并添加HTML://.../hls 在屏幕上出现
enter image description here如何在Android中播放HLS视频?

家伙告诉我说:

Android是奇怪的,因为它不会在Android Chrome浏览器,但将在股票Android浏览器(当然,以前普通的Android 工作 浏览器现在是c hrome是股票浏览器)。它也适用于所有 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"); 

回答

0

此代码的工作对我来说:(是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时才有效:)