gpt4 book ai didi

android - 视频播放器上的模糊面板

转载 作者:行者123 更新时间:2023-12-04 18:06:08 40 4
gpt4 key购买 nike

我现在正在开发的应用程序需要特殊设计。

现在,我有一个播放视频流的第三方私有(private)视频库。该屏幕的设计包括覆盖在视频顶部的半透明面板,模糊了后面的视频部分。

通常为了模糊背景,您应该对后面的 View 进行截图,将其模糊并将其用作前景 View 的图像。

在这种情况下,视频会继续播放,因此模糊图像每帧都会发生变化。那你将如何实现呢?

一个可能的解决方案是创建一个线程,截取屏幕截图,裁剪它们并将它们作为背景。我猜如果那个 View 是 SurfaceView 那就更好了。但我想知道在这种情况下最好的方法是什么。持续截取屏幕截图的线程会产生巨大的性能影响吗?是否可以用这些图像提供表面 View 缓冲区?

谢谢!

最佳答案

SurfaceView 表面是图形缓冲区的消费者。一个消费者不能有两个生产者,这意味着您不能将视频发送给它并同时绘制它。

你可以有多个图层; SurfaceView 表面位于 View UI 层后面的单独层上。因此,您可以将视频播放到 SurfaceView 的表面,并在 SurfaceView 的 View 上绘制模糊矩形。 (通常 SurfaceView 的 View 是完全透明的,仅用作布局目的的占位符。)

另一种选择是将视频帧渲染到 SurfaceTexture .然后,您将使用 GLES 将该纹理渲染到 SurfaceView 表面,并在顶部渲染模糊矩形。您可以在 Grafika 中找到将实时摄像机输入视为 GLES 纹理的示例。 (“来自相机的纹理” Activity )。这还有一个额外的好处,因为您没有与 View 系统交互——SurfaceView 表面是由系统而不是应用程序组合的——你可以在一个独立的线程上完成所有操作。

无论如何,渲染、抓取屏幕截图和重新渲染都将比上述选项慢。

欲了解更多关于事情为何如此运作的详细信息,请参阅 Android System-Level Graphics建筑学博士。

关于android - 视频播放器上的模糊面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26116845/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com