Android-在多个视图上渲染同一视频

Android-在多个视图上渲染同一视频,android,surfaceview,textureview,Android,Surfaceview,Textureview,我有一个媒体数据源,我正在使用androidMediaPlayer播放媒体 如何在同一个活动中显示从MediaPlayer到多个视图的视频输出,是否有其他方法 我希望媒体的视频部分以两种不同的视图呈现,而无需从数据源多次读取 当前代码: TextureView mTextureView1; TextureView mTextureView2; mTextureView1.setSurfaceTextureListener(new TextureView.SurfaceTextureListen

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

如何在同一个
活动
中显示从
MediaPlayer
到多个视图的视频输出,是否有其他方法

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

当前代码:

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();
                }
            });
        }

您当前正在播放TextureView,它接收SurfaceTexture中的帧,然后将其渲染到视图UI层

一种方法是创建自己的SurfaceTexture来接收帧,然后使用OpenGL ES以您喜欢的方式渲染帧。有关示例,请参见中的“摄影机纹理”活动。它可以定位、旋转和缩放摄像机的输入;您可以轻松更改此选项以接收来自MediaPlayer的输入,并在SurfaceView上渲染纹理两次


如果要将其渲染到不同的视图上,可以设置两个TextureView并渲染到它们。为每个视图使用一个单独的EGL上下文和不同的EGL曲面。

这里有一个直接链接到摄影机的纹理:你曾经得到过这个吗?