我将SurfaceView添加到FrameLayout以显示视频,然后将相同的一个SurfaceView添加到另一个FrameLayout以显示相同的视频继续,但不显示任何错误,如下所示: enter image description here
here is bad,it`s used to update video picture to the SurfaceTexture used OpenGLES
答案 0 :(得分:0)
您不应使用多个表面视图,如前面提到的here。
通常,您需要为两个视图创建单个openGL上下文,如果可能的话,这可能是一个解决方案。
如果您无法避免多个上下文,那么您在单个线程上遇到了相当大的问题。每个线程只能将一个上下文设置为当前,因此对于您执行的每个操作,您需要将正确的上下文设置为当前。因此,在每次绘制调用开始时,必须设置上下文。看起来很简单,但是如果视图已经在一个你可能无法控制的方法中使用openGL做了些什么,那么这也行不通。但从轻量级来看,我希望这已经为你完成了,所以你留下了最后一个问题:上下文可能不会共享资源,缓冲区如纹理,除非上下文是"共享"。要创建共享上下文,您需要将主上下文作为上下文构造中的参数传递,这再次导致您需要能够自己控制上下文。
请尝试以下方法: