Android webview在播放时出现黑屏

Android webview在播放时出现黑屏,android,android-studio,html5-video,html5-audio,Android,Android Studio,Html5 Video,Html5 Audio,我正在开发一个应用程序,它使用WebView加载外部视频(.mp4),但该页面只播放音频,视频仅为“黑色”。为了解决这个问题,我做了很多努力,做了所有可能的事情,但都失败了。你能帮我吗 MainActivity.java -- REMOVED -- AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/

我正在开发一个应用程序,它使用WebView加载外部视频(.mp4),但该页面只播放音频,视频仅为“黑色”。为了解决这个问题,我做了很多努力,做了所有可能的事情,但都失败了。你能帮我吗

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>
<?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>


视频URL: 测试网站:ntcdn.stream/prop/httpdelivery/modal
我已经做了:

  • 设置硬件加速=真
  • 设置wv.setWebChromeClient(新的WebChromeClient())
    并且视频屏幕始终为黑色,仅运行音频。我该怎么办

以下代码适用于我在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");

请参阅我所附的屏幕截图:

以下代码可用于我在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");


请参阅我所附的屏幕截图:

发布您试图在webviewThread updated中加载的视频url!谢谢,下面是我的答案。不支持所有视频格式。可能您的视频格式不受支持。(至少是您的设备)我不敢相信我的J5无法加载。mp4视频:\n在webviewThread updated中发布您尝试加载的视频url!谢谢,下面是我的答案。不支持所有视频格式。可能您的视频格式不受支持。(至少通过您的设备)我不敢相信我的J5无法加载。mp4视频:\n我在播放包含视频的
HTML
页面时遇到类似问题,只播放音频,不播放视频。有关我的案例的更多详细信息,请查看我在@Ebraheem这个链接上的问题。您是否已使用iframe查看了我编辑的答案?谢谢您的回复,但就我而言,
HTML
页面中没有
iframe
。@Ebraheem我的意思是,如果有任何HTML内容,您可以使用iframe方法。谢谢您的时间和帮助。我终于明白了,这是一个与Android emulator相关的问题,当我收到我的Android电视盒并在上面测试应用程序时,一切正常。我在播放包含视频的
HTML
页面时遇到了类似的问题,只播放音频,不播放视频。有关我的案例的更多详细信息,请查看我在@Ebraheem这个链接上的问题。您是否已使用iframe查看了我编辑的答案?谢谢您的回复,但就我而言,
HTML
页面中没有
iframe
。@Ebraheem我的意思是,如果有任何HTML内容,您可以使用iframe方法。谢谢您的时间和帮助。我终于明白了,这是一个与Android仿真器相关的问题,当我收到我的Android电视盒并在上面测试应用程序时,一切正常。