How to play HLS video in Android?

Here is stream video from justin.com or twitch.tv this CHANNEL Go to here and choose any live stream, get from them url and add html://.../hls in screen appears

Guys told me that:

Android is weird in that it will not work on Android Chrome but will work in the stock Android browser (well, previous stock Android browser now that Chrome is the stock browser). It'll also work on all Safari browsers.

I've implemented this code

 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;
    }
}

But it opens first picture from video and stop caching... it seems like WebView doesn't cache video... What is wrong?

UPDATED

after following code stream plays only 2 sec and then stops

  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");

Answers


This code works for me: (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");
}
}

I don't know why but it work only when i put WebView into FrameLayout :)


Need Your Help

File upload limited to 1MB?

php mysql cpanel

I can't understand why my server isn't accepting files larger than 1MB. I am using cpanel and my host has told me that I can't edit my php.ini file directly.

Grails 1.3.7 to 2.3.4 upgrade “hibernate-3.6.10.6.zip is not a valid plugin”

grails

I recently upgraded my project from 1.3.7 to 2.3.4. I removed the following from application.properties:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.