是否可以在单个SurfaceView上同时渲染两个视频流?

时间:2016-03-28 20:12:26

标签: android surfaceview

是否可以使用单个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(这忽略了他们的事实反正可能会相互重叠,因为我没有在任何地方设置位置。

基本上,我正在努力实现这一目标吗?

1 个答案:

答案 0 :(得分:5)

是的,但需要付出一些努力。

基本计划是将MediaPlayer的输出定向到SurfaceTexture,它将每个传入帧转换为GLES纹理。然后将其渲染到SurfaceView,绘制一个填充视图一半的矩形。你为其他MediaPlayer做同样的事情。

您需要的部分可以在Grafika中找到,例如来自相机的#34;纹理" Activity从相机预览中获取视频流,将其转换为GLES纹理,然后将其渲染为SurfaceView。

简单地将两个MediaPlayers的输出定向到单独的SurfaceViews更容易,但不太灵活。

Surfaces是生产者 - 消费者对中的端点。一次只能有一个制作人,所以你不能简单地在一个SurfaceView上引导两个MediaPlayers。