是否可以在单个 SurfaceView 上同时渲染两个视频流?
Is it possible to render two video streams simultaneously on a single SurfaceView?
是否可以使用单个 SurfaceView
的不同 "sections" 同时呈现两个视频流?
我已经制作了使用两个并排的 SurfaceView 同时渲染两个视频的示例代码,但我想知道是否可以让两个视频在同一个 SurfaceView
.[=19= 上播放]
使用 MediaPlayer
,您可以将 SurfaceHolder 或 Surface 本身设置为显示。我相信实现我所要求的代码将在 surfaceCreated
方法中:
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mediaPlayerTop.setDisplay(holder);
mediaPlayerBottom.setDisplay(holder);
play();
}
但是,当您尝试 prepare
第二个 MediaPlayer
时,简单地将两个 MediaPlayer
设置为相同的 Surface 会导致 IllegalStateException
(这忽略了事实他们可能无论如何都会重叠,因为我没有在任何地方设置位置)。
基本上,我想要实现的目标是否可行?
是的,但需要一些努力。
基本计划是将 MediaPlayer 的输出定向到 SurfaceTexture,它将每个传入帧转换为 GLES 纹理。然后将其渲染到 SurfaceView,绘制一个填充一半视图的矩形。你对另一个 MediaPlayer 做同样的事情。
您需要的作品可以在 Grafika 中找到,例如"texture from camera" Activity 从相机预览中获取视频流,将其转换为 GLES 纹理,并将其渲染到 SurfaceView。
简单地将两个 MediaPlayer 的输出定向到单独的 SurfaceView 更容易,但灵活性较低。
表面是生产者-消费者对中的端点。一次只能有一个制作人,所以你不能简单地将两个 MediaPlayer 指向一个 SurfaceView。
是否可以使用单个 SurfaceView
的不同 "sections" 同时呈现两个视频流?
我已经制作了使用两个并排的 SurfaceView 同时渲染两个视频的示例代码,但我想知道是否可以让两个视频在同一个 SurfaceView
.[=19= 上播放]
使用 MediaPlayer
,您可以将 SurfaceHolder 或 Surface 本身设置为显示。我相信实现我所要求的代码将在 surfaceCreated
方法中:
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mediaPlayerTop.setDisplay(holder);
mediaPlayerBottom.setDisplay(holder);
play();
}
但是,当您尝试 prepare
第二个 MediaPlayer
时,简单地将两个 MediaPlayer
设置为相同的 Surface 会导致 IllegalStateException
(这忽略了事实他们可能无论如何都会重叠,因为我没有在任何地方设置位置)。
基本上,我想要实现的目标是否可行?
是的,但需要一些努力。
基本计划是将 MediaPlayer 的输出定向到 SurfaceTexture,它将每个传入帧转换为 GLES 纹理。然后将其渲染到 SurfaceView,绘制一个填充一半视图的矩形。你对另一个 MediaPlayer 做同样的事情。
您需要的作品可以在 Grafika 中找到,例如"texture from camera" Activity 从相机预览中获取视频流,将其转换为 GLES 纹理,并将其渲染到 SurfaceView。
简单地将两个 MediaPlayer 的输出定向到单独的 SurfaceView 更容易,但灵活性较低。
表面是生产者-消费者对中的端点。一次只能有一个制作人,所以你不能简单地将两个 MediaPlayer 指向一个 SurfaceView。