Android WebView 视频播放,音频正常,但不显示图像 - 在浏览器中正常
Android WebView video plays, audio fine, but shows no image - ok in browser
尝试在 Android WebView 中播放视频时出现奇怪的行为。
虽然视频确实在播放,并且可以听到声音,但视频应该出现的地方只有一个白色/空白屏幕。
它使用本机浏览器工作得很好。
甚至在新的非常基础的新 Android 项目(使用新的空模拟器)中,也不会显示视频。还尝试使用 3gp 格式并使用一些最新的 SDK (API 27)。
模拟器(各种设备)和物理设备之间也没有区别。我也没有成功打开包含视频的不同网站(显示网站和视频 - 声音可用,但没有图像)。
视频控件可见并且可以点击(除非设置为自动播放,它会立即播放)。
日志中的错误信息:
E/chromium: [ERROR:gl_surface_egl.cc(264)] eglChooseConfig failed with error EGL_SUCCESS
E/EGL_emulation: eglQueryContext 32c0 EGL_BAD_ATTRIBUTE
E/EGL_emulation: tid 23192: eglQueryContext(1772): error 0x3004 (EGL_BAD_ATTRIBUTE)
E/ACodec: [OMX.google.h264.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
HTML WebView中显示的页面:
<html>
<head>
</head>
<body>
<video controls autoplay>
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</body>
</html>
基本申请内容:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webView);
webView.loadUrl("https://www...");
}
}
我的尝试包括设置自定义 webview、webchrome 客户端以及启用/禁用自定义设置。
webView.setWebChromeClient(new MyWebChromeClient());
webView.setWebViewClient(new MyWebViewClient(activity));
webView.clearCache(true);
webView.clearHistory();
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true); // Seems to be required to support HTTPS
webSettings.setAllowFileAccess(true);
//Enabling zoom-in controls
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(true);
webSettings.setMediaPlaybackRequiresUserGesture(false);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
清单中:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
有尝试
android:hardwareAccelerated="true"/ "false"
如果能提供进一步深入的帮助,我们将不胜感激。
显然,网络引擎无法再计算视频大小。然后以零宽度和高度呈现。
这可以通过为 <video>
标签分配宽度来解决:
<video controls autoplay style="width:100px;">
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
或者
<div style="width:100%; height:100%;">
<video controls autoplay>
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
尝试在 Android WebView 中播放视频时出现奇怪的行为。 虽然视频确实在播放,并且可以听到声音,但视频应该出现的地方只有一个白色/空白屏幕。 它使用本机浏览器工作得很好。
甚至在新的非常基础的新 Android 项目(使用新的空模拟器)中,也不会显示视频。还尝试使用 3gp 格式并使用一些最新的 SDK (API 27)。 模拟器(各种设备)和物理设备之间也没有区别。我也没有成功打开包含视频的不同网站(显示网站和视频 - 声音可用,但没有图像)。
视频控件可见并且可以点击(除非设置为自动播放,它会立即播放)。
日志中的错误信息:
E/chromium: [ERROR:gl_surface_egl.cc(264)] eglChooseConfig failed with error EGL_SUCCESS
E/EGL_emulation: eglQueryContext 32c0 EGL_BAD_ATTRIBUTE
E/EGL_emulation: tid 23192: eglQueryContext(1772): error 0x3004 (EGL_BAD_ATTRIBUTE)
E/ACodec: [OMX.google.h264.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
HTML WebView中显示的页面:
<html>
<head>
</head>
<body>
<video controls autoplay>
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</body>
</html>
基本申请内容:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webView);
webView.loadUrl("https://www...");
}
}
我的尝试包括设置自定义 webview、webchrome 客户端以及启用/禁用自定义设置。
webView.setWebChromeClient(new MyWebChromeClient());
webView.setWebViewClient(new MyWebViewClient(activity));
webView.clearCache(true);
webView.clearHistory();
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true); // Seems to be required to support HTTPS
webSettings.setAllowFileAccess(true);
//Enabling zoom-in controls
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(true);
webSettings.setMediaPlaybackRequiresUserGesture(false);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
清单中:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
有尝试
android:hardwareAccelerated="true"/ "false"
如果能提供进一步深入的帮助,我们将不胜感激。
显然,网络引擎无法再计算视频大小。然后以零宽度和高度呈现。
这可以通过为 <video>
标签分配宽度来解决:
<video controls autoplay style="width:100px;">
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
或者
<div style="width:100%; height:100%;">
<video controls autoplay>
<source src="https://www...*.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>