Android - 在多个视图上呈现相同的视频

时间:2015-06-11 11:51:11

标签: android surfaceview textureview

我有一个媒体数据源,我正在使用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();
                }
            });
        }

1 个答案:

答案 0 :(得分:2)

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

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

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