使用 opengl es 将视频渲染到 SurfaceView 但担心更多开销

Use opengl es to render video to SurfaceView but concerned about more overhead

我写了一个视频播放视图,它是一个带MediaPlayer实例的SurfaceView。创建表面后,我将媒体播放器连接到表面支架,然后开始播放。

这很容易,每个人都知道细节。但是我想绘制一个位图,也就是视频的第一帧,surfaceview.Canvas 不能选择绘制位图,因为它会禁用媒体播放器连接。

从api 14级开始,我们可以新建一个带有surfacetexture的表面。所以我们可以使用opengl es来绘制视频帧和位图。但是我担心 performance.This 播放视频的方式比较复杂,会不会造成更多的开销?谁能给我一些建议?

您有几个选择:

  1. 使用 FrameLayout 在 SurfaceView 之上放置一个自定义视图(或者可能只是一个 ImageView)。在那里绘制您的内容。当视频播放开始时,隐藏视图。

  2. 连接GLES,绘制第一帧,断开GLES,连接MediaPlayer,播放影片。这基本上就是 Grafika 的 PlayMovieSurfaceActivity 在播放电影之前将屏幕清除为黑色(参见 clearSurface())的做法。

  3. 如您的问题所述,您可以将视频发送到 SurfaceTexture,然后选择渲染您的内容或将图像从纹理渲染到 SurfaceView。

#1 是最简单的。 #3 增加了复杂性并且更昂贵。