【问题标题】:Android - rendering same video on Multiple viewsAndroid - 在多个视图上渲染相同的视频
【发布时间】:2015-08-27 02:25:57
【问题描述】:

我有一个媒体数据源,我正在使用 android MediaPlayer 播放媒体。

如何将MediaPlayer 的视频输出显示到同一个Activity 中的多个视图中,有没有其他方法可以做到这一点?

我希望媒体的视频部分以两种不同的视图呈现,而不需要从数据源多次读取。

当前代码:

TextureView mTextureView1;
TextureView mTextureView2;

mTextureView1.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
            mMediaPlayer = new MediaPlayer(AppActivity.this);
            try {
                mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(path));
            } catch (IOException e) {
                e.printStackTrace();
            }
            mMediaPlayer.setSurface(new Surface(surface));
            mMediaPlayer.setLooping(true);
            mMediaPlayer.prepareAsync();

            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
        }

【问题讨论】:

  • 你收到过这个吗?

标签: android surfaceview textureview


【解决方案1】:

您当前正在使用 TextureView,它接收 SurfaceTexture 中的帧,然后将它们渲染到 View UI 层。

一种方法是创建您自己的 SurfaceTexture 来接收帧,然后使用 OpenGL ES 渲染您喜欢的帧。例如,请参阅Grafika 中的“来自相机的纹理”活动。它可以定位、旋转和缩放来自相机的输入;您可以轻松更改此设置以接收来自 MediaPlayer 的输入,并将纹理两次渲染到 SurfaceView。

如果你想将它渲染到不同的视图上,你可以设置几个 TextureView 并渲染到它们。为每个视图使用具有不同 EGL 表面的单个 EGL 上下文。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2011-04-16
相关资源
最近更新 更多