【问题标题】:Is it possible to render two video streams simultaneously on a single SurfaceView?是否可以在单个 SurfaceView 上同时渲染两个视频流?
【发布时间】:2016-03-28 20:12:26
【问题描述】:

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

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

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

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

    play();
}

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

基本上,我想要实现的目标可行吗?

【问题讨论】:

    标签: android surfaceview


    【解决方案1】:

    是的,但需要一些努力。

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

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

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

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

    【讨论】:

    • 是否可以通过 Android 中的流连接在单个 Activity 中同时播放 2 个 webrtc 流
    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 2015-08-27
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多