问题标签 [textureview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1140 浏览

android - 在 TextureView 上播放视频时 fps 低

我正在为 Android 应用程序创建视频过滤器,所以我使用TextureView它来播放视频和过滤器SurfaceTexture。但是视频的 FPS 总是低于原始的(30fps)。

正如我在 Galaxy S3 上检查的那样,onSurfaceTextureUpdated()尽管有过滤器或没有过滤器,但每秒只能输入 5~8 次。但在更强大的设备上,如三星 Galaxy J,它可以增加到每秒 10~13 次

请注意,此视频从 SD 卡加载。

有人知道原因吗?

0 投票
1 回答
1944 浏览

android - 如何将纹理渲染到 Android GLSurfaceView

我有一个标准的 GLSurfaceView 类:

我有一个实现 GLSurfaceView.Renderer 的 Renderer 类:

在一个单独的 JNI 线程中,我将一些视频数据(YUV 格式)上传到 OpenGLES 纹理。我在 Java 中收到新纹理可用的通知,并且我有相应的纹理 ID。

如何以最小的性能影响在 Renderer 类中显示此纹理的内容?

0 投票
1 回答
2924 浏览

android - Android - 在多个视图上渲染相同的视频

我有一个媒体数据源,我正在使用 android 播放媒体MediaPlayer

如何MediaPlayer在同一个视图中显示来自多个视图的视频输出Activity,有没有其他方法可以做到这一点?

我希望媒体的视频部分以两个不同的视图呈现,而无需从数据源多次读取。

当前代码:

0 投票
0 回答
8858 浏览

android - 如何在 TextureView 上绘制位图

我正在尝试在 android 上播放视频TextureView。关于视频,一切都很好。但MediaPlayer.prepare();需要一些时间。所以我想展示一些当时的占位符。我正在尝试像这样使用 Glide 来做到这一点:

但它没有显示任何图片。我的情况是SurfaceView我们需要手动调用onDraw。SurfaceHolder 已用于此目的。但TextureView没有getSurfaceHolder()办法。

这样做的正确方法是什么?

UPD:我发现如果我不设置图片就会显示,MediaPlayer这意味着MediaPlayer在缓冲视频时保持表面黑色。是否有可能以某种方式覆盖这种行为?

0 投票
2 回答
887 浏览

java - TextureView 不断获得 SIGSEGV 11

我找到了这个解决方案,但不幸的是,它对我不起作用。当我只显示一个小的移动矩形时,没有繁重的动画,它工作正常,但我想显示一些我用 .png 加载的动画帧,每当我最小化我的应用程序或按下后退按钮时,我立即得到一个 SIGSEV 错误。

对于一个我用很多点绘制图形的屏幕,我找到了一个解决方案,在我画完线条后我只是停止线程,但是由于我需要显示一个移动的动画,所以我不能这样做特定的片段。

我的渲染线程代码如下所示:

这显然是基于 Romain Guy 的示例,可以在这里找到

非常感谢您的帮助!

编辑:故障转储是这个:

0 投票
1 回答
546 浏览

android - 在两个视图上渲染 Android MediaCodec 输出以实现 VR 耳机兼容性

到目前为止我所知道的是,我需要使用可以同时在两个 TextureView 上渲染的 SurfaceTexture。所以它将是:MediaCodec -> SurfaceTexture -> 2x TextureViews

但是如何以编程方式获得 SurfaceTexture 以在 MediaCodec 中使用?据我所知,为每个 TextureView 创建了一个新的 SurfaceTexture,所以如果我的活动中有两个 TextureView,我将得到两个 TextureView!?那是一对多... ;)

或者有没有其他方法可以将 MediaCodec 输出两次渲染到屏幕上?

0 投票
2 回答
8541 浏览

android - Android TextureView/绘图/绘画性能

我正在尝试TextureView在 Android 上制作一个绘图/绘画应用程序。我想支持高达 4096x4096 像素的绘图表面,这对于我的最小目标设备(我用于测试)来说似乎是合理的,它是一个具有不错的四核 CPU 和 2GB 内存的 Google Nexus 7 2013。

我的要求之一是我的视图必须位于允许放大和缩小和平移的视图内,这是我编写的所有自定义代码(想想 iOS 中的 UIScrollView)。

我尝试使用TextureView带有 OnDraw 的常规 View (不是),性能绝对糟糕 - 每秒不到 1 帧。即使我Invalidate(rect)只用改变的矩形打电话也会发生这种情况。我尝试关闭视图的硬件加速,但没有渲染,我认为是因为 4096x4096 对于软件来说太大了。

然后我尝试使用TextureView并且性能稍微好一点 - 每秒大约 5-10 帧(仍然很糟糕但更好)。用户绘制位图,然后使用后台线程将其绘制到纹理中。我正在使用 Xamarin,但希望代码对 Java 人有意义。

如果我将 lockCanvas 更改为传递 null 而不是 rect,则性能在 60 fps 时非常出色,但内容会TextureView闪烁并损坏,这令人失望。我原以为它只是在下面使用 OpenGL 帧缓冲区/渲染纹理,或者至少可以选择保留内容。

除了在 Android 的原始 OpenGL 中执行所有操作以实现高性能绘图和在绘图调用之间保留的表面上绘图之外,还有其他选择吗?

0 投票
1 回答
1192 浏览

android - Android线程控制多个纹理视图导致奇怪的闪烁

我正在尝试使用单个线程使用画布锁定/解锁从 UI 线程渲染三个单独的 TextureView。观察到的问题是正在绘制的每个纹理视图的一致闪烁,闪烁由不同的纹理视图的框架组成。例如,我按顺序绘制帧 A、B 和 C。帧 C 看起来很好,但是帧 A 和 B 会随着帧 C 的偶尔实例闪烁,帧 A 偶尔会随着帧 B 的实例闪烁。

我已经阅读了描述 Android Core Graphics 的文档,并且对 android 的帧缓冲系统的工作原理有了相当好的理解。简而言之,我的怀疑是我连续执行 lockCanvas/unlockCanvasAndPost 调用的速度太快,并且帧缓冲区无法完成我的请求,而是简单地绘制了前一个(不正确的)帧。

我已经尝试了几件事来解决这个问题。尝试使用 Choreographer 在继续调用画布之前等待 VSYNC 有所帮助,但正如预期的那样降低了我的帧速率,但问题仍然存在。我还尝试了另一种无睡眠命令的渲染循环,观察到的现象没有区别。

本质上,我对如何解决这个问题一无所知,并希望获得一些外部意见。在此先感谢,代码片段如下:

主渲染循环:

MyTextureView doRender() 方法:

0 投票
3 回答
17999 浏览

android - Android SDK - camera2 - 在 TextureView 上绘制矩形

我是android开发的新手,我发现很难在camera2 api上找到好的例子。

我正在慢慢解决大多数问题,但在这个问题上我被卡住了。在默认相机中,当您触摸屏幕进行对焦时,它会暂时显示一个对焦区域的矩形。我想做类似的事情(或者在这种情况下,开始时完全相同的事情,所以我可以弄清楚)。

我在某处读到(我认为 SDK 文档中的 TextureView 页面),当它被用作相机预览时,您不能在纹理视图上绘制 - 并且调用 lock 方法将返回 null 而不是画布。

我在网上找到了这个:https ://github.com/commonsguy/vidtry/ 但我无法让它工作。我要么得到错误,说我的主视图不能转换为我的可绘制视图,反之亦然 - 或者我的可绘制视图在顶部并使屏幕变黑 - 或者它在底部并且不会响应触摸事件(并试图强制上面视图中的 performClick 会导致崩溃。)

我卡住了!谁能给我一个解释或示例,说明如何在事件位置上绘制矩形几秒?

谢谢!

0 投票
2 回答
576 浏览

android - 是否可以将类 TextureView 移植到 Android Honeycomb

我计划实现在一个屏幕上同时播放多个视频的功能,并且可以在播放视频时滚动视频视图。

我要将视频视图添加到充当其父视图的 ListView 中。我们不应该使用 SurfaceView 来渲染视频流,因为 SurfaceView 不能被 android 视图层次结构重绘。滚动 SurfaceView 是个坏主意。

幸运的是,TextureView 是从 API 级别 14 开始添加的,它是 SurfaceView 的替代品。所以我可以用它来实现我的计划。

但是TextureView只有API级别14以上才可用。实际上,我被要求在不低于API级别11的平台上实现这个功能。

我开始关注从 API 级别 11 开始添加到 android 的 SurfaceTexture,我们可以使用 SurfaceTexture 将相机图像流或视频解码流放到 OpenGL 纹理上,我也知道 android 视图层次结构是由 opengl 绘制的,而不是从 API 级别 11 开始的skia。

所以我想知道我是否可以使用 SurfaceTexture 将视频流渲染到普通的 android 视图上。

换句话说,我们是否可以为 api 级别 11-13 实现一个自定义的小部件来替换从 api 级别 14 开始添加的 TextureView 的位置?

我查看了android.view.TextureView的源码,不是很复杂,依赖类如下:

并且有 4 个原生 api:

是否可以将TextureView类移植到android api level 11-13?

谁能给我一些建议?