android - webview 是否像 videoview 一样创建一个单独的表面?

标签 android android-webview android-videoview

我很困惑,期待对此的一些评论。我假设 WebView 创建一个单独的表面来绘制,并且不使用 Activity 的默认表面来绘制。但是,在 SurfaceFlinger 转储中,我没有看到使用 WebView 时创建新的 Surface。

当我使用 videoview 进行类似的实验时,我看到创建了一个单独的表面。

在webview上,我也想播放视频,因此假设将创建一个单独的表面,因此表面分辨率将根据视频分辨率。但如果它使用应用程序的表面,那么视频的最大分辨率必须是UI分辨率。

在 chromium 代码中,我看到了单独表面的代码,但实际上我看不到创建的表面。

有人可以帮我澄清一下吗?

谢谢。

最佳答案

如果你看VideoView inheritance graph您会注意到它继承自 SurfaceView,而 WebView does not ,所以WebView只能通过创建外部SurfaceView来实现。

如果你search for usages of ExternalVideoSurface in WebView part of Chromium code ,你会注意到它只有在启用“视频打洞”时才启用,该功能仅用于解码加密视频,其中 WebView 需要进行“打洞”。有一个System API-level setting in WebView可以实现这种行为,但它有其自身的局限性,因此不建议一般使用。

关于android - webview 是否像 videoview 一样创建一个单独的表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29028315/

相关文章:

android - 从本地 html 文件调用 java 方法

android - 在 webview 加载之前加载图像?

android - 如何在VideoView中播放这个视频?

android - 如何在 AndroidManifest.xml 中隐藏 API key

javascript - 防止 jQuery Mobile 中的 ajax 缓存

java - Generate Signed APK : Errors while building APK. 您可以在 'Messages' View 中找到错误

android - 缩放 VideoView 以填充宽度,保持纵横比

java - Android GridView 1 全宽项目然后 2 列,怎么样?

android - 在android webview中选择文件错误

android - 从 VideoView 调用 MediaPlayer.PrepareAsync