0

I'm developing an app that uses WebView to load external video (.mp4), but the page plays only audio, and the video is only "black". I've searched so much and did all possible things to try solve this problem but I failt. Can you help me?

MainActivity.java

-- REMOVED --

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="topflix.topflix">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/rounded"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:hardwareAccelerated="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="topflix.topflix.MainActivity">

<WebView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/wv"
    />
</android.support.constraint.ConstraintLayout>

Print of activity_main.xml > click here


Video URL: http://media-br-am.crackle.com/1/3/v6/11zlf_480p.mp4 Website for tests: ntcdn.stream/prop/httpdelivery/modal
What I already did:

  • Set hardwareAccelerated=true
  • Set wv.setWebChromeClient(new WebChromeClient());
    and the video screen persists in black, running only audio. What should I do??
Strepk
  • 111
  • 1
  • 2
  • 6

1 Answers1

6

The below code is working for me to load video in webview :

webView = findViewById(R.id.webView);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

        if (Build.VERSION.SDK_INT >= 21) {
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
        }

        if (android.os.Build.VERSION.SDK_INT < 16) {
            webView.setBackgroundColor(0x00000000);
        } else {
            webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
        }

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    view.loadUrl(request.getUrl().toString());
                }
                return super.shouldOverrideUrlLoading(view, request);
            }

            @Override
            public void onPageStarted(WebView webview, String url, Bitmap favicon) {
                super.onPageStarted(webview, url, favicon);
                webview.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onPageFinished(WebView webview, String url) {

                webview.setVisibility(View.VISIBLE);
                super.onPageFinished(webview, url);

            }
        });
        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");

        webView.loadUrl("http://media-br-am.crackle.com/1/3/v6/11zlf_480p.mp4");

EDIT : if your video is in iframe -->

webView.loadDataWithBaseURL(null, iframe, "text/html; charset=utf-8", "utf-8", null);

see the screenshot i attached :enter image description here

Hitesh Sarsava
  • 666
  • 4
  • 15
  • 1
    I have a similar issue in playing an `HTML` page that contains a video, only audio is played but video is not. For more details about my case can you check please my question from this link [stackoverflow question](https://stackoverflow.com/questions/53691526/video-is-not-started-inside-webview-in-android-api-25) – Ebraheem Dec 13 '18 at 14:37
  • @Ebraheem have you checked with the my edited answer with iframe? – Hitesh Sarsava Dec 14 '18 at 13:04
  • Thank you for your response, but in my case there is no `iframe` in the `HTML` page. – Ebraheem Dec 15 '18 at 12:53
  • @Ebraheem I mean to say that you can use iframe method if there is any HTML contents. – Hitesh Sarsava Dec 17 '18 at 07:58
  • Thank you for your time and help. I finally figured it out, it was an Android emulator related issue, when I received my Android TV box and test the application on it, everything is working fine. – Ebraheem Dec 17 '18 at 08:55