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

Hyp*_*ino 1 android surfaceview

是否可以使用单个图像的不同“部分”同时渲染两个视频流SurfaceView

我已经制作了示例代码,该示例代码使用两个SurfaceView并排同时渲染两个视频,但是我想知道是否可以使两个视频在同一屏幕上播放SurfaceView

使用MediaPlayer,您可以将SurfaceHolder或Surface本身设置为显示。我相信实现我所要求的代码将在surfaceCreated方法内部:

@Override
public void surfaceCreated(SurfaceHolder holder)
{
    mediaPlayerTop.setDisplay(holder);
    mediaPlayerBottom.setDisplay(holder);

    play();
}
Run Code Online (Sandbox Code Playgroud)

但是,仅将两个MediaPlayers 设置为相同的Surface会导致在IllegalStateException尝试prepare第二个s 时出现MediaPlayer(这忽略了这样一个事实,即它们可能会相互重叠,因为我没有在任何地方设置位置)。

基本上,我要实现的目标是可能的吗?

fad*_*den 5

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

基本计划是将MediaPlayer的输出定向到SurfaceTexture,它将每个传入的帧转换为GLES纹理。然后,将其渲染到SurfaceView,绘制一个填充视图一半的矩形。您对另一个MediaPlayer执行相同的操作。

您需要的片段可以在Grafika中找到,例如,“来自相机的纹理”活动从相机预览中获取视频流,将其转换为GLES纹理,然后将其呈现为SurfaceView。

只需将两个MediaPlayer的输出定向到单独的SurfaceView会容易得多,但灵活性较差。

表面是生产者-消费者对中的端点。一次只能有一个制作人,因此您不能简单地将两个MediaPlayer指向一个SurfaceView。