Android 播放时webview黑屏
Android webview black screen while playing
我正在开发一个使用 WebView 加载外部视频 (.mp4) 的应用程序,但页面只播放音频,而视频只有 "black" .我搜索了很多并做了所有可能的事情来尝试解决这个问题,但我失败了。你能帮帮我吗?
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>
打印 activity_main.xml > 点击 here
视频 URL:http://media-br-am.crackle.com/1/3/v6/11zlf_480p.mp4
测试网址:ntcdn.stream/prop/httpdelivery/modal
我已经做了什么:
- 设置 hardwareAccelerated=true
- 设置wv.setWebChromeClient(new 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");
编辑 :如果您的视频在 iframe 中 -->
webView.loadDataWithBaseURL(null, iframe, "text/html; charset=utf-8", "utf-8", null);
查看我附上的屏幕截图:
我正在开发一个使用 WebView 加载外部视频 (.mp4) 的应用程序,但页面只播放音频,而视频只有 "black" .我搜索了很多并做了所有可能的事情来尝试解决这个问题,但我失败了。你能帮帮我吗?
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>
打印 activity_main.xml > 点击 here
视频 URL:http://media-br-am.crackle.com/1/3/v6/11zlf_480p.mp4
测试网址:ntcdn.stream/prop/httpdelivery/modal
我已经做了什么:
- 设置 hardwareAccelerated=true
- 设置wv.setWebChromeClient(new 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");
编辑 :如果您的视频在 iframe 中 -->
webView.loadDataWithBaseURL(null, iframe, "text/html; charset=utf-8", "utf-8", null);
查看我附上的屏幕截图: