是否可以使用单个SurfaceView
的不同“部分”同时渲染两个视频流?
我制作了示例代码,使用两个SurfaceViews并排渲染两个视频,但我想知道是否可以让两个视频同时播放SurfaceView
。
使用MediaPlayer
,您可以将SurfaceHolder或Surface本身设置为显示。我相信实现我所要求的代码将在surfaceCreated
方法内部:
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mediaPlayerTop.setDisplay(holder);
mediaPlayerBottom.setDisplay(holder);
play();
}
但是,当您尝试MediaPlayer
第二个IllegalStateException
时,只需将prepare
设置为同一个Surface就会产生MediaPlayer
(这忽略了他们的事实反正可能会相互重叠,因为我没有在任何地方设置位置。
基本上,我正在努力实现这一目标吗?
答案 0 :(得分:5)
是的,但需要付出一些努力。
基本计划是将MediaPlayer的输出定向到SurfaceTexture,它将每个传入帧转换为GLES纹理。然后将其渲染到SurfaceView,绘制一个填充视图一半的矩形。你为其他MediaPlayer做同样的事情。
您需要的部分可以在Grafika中找到,例如来自相机的#34;纹理" Activity从相机预览中获取视频流,将其转换为GLES纹理,然后将其渲染为SurfaceView。
简单地将两个MediaPlayers的输出定向到单独的SurfaceViews更容易,但不太灵活。
Surfaces是生产者 - 消费者对中的端点。一次只能有一个制作人,所以你不能简单地在一个SurfaceView上引导两个MediaPlayers。