简体   繁体   English

在MediaPlayer.prepare之后将TextureView应用于MediaPlayer会导致黑屏

[英]Applying TextureView to MediaPlayer after MediaPlayer.prepare causes black screen

I'd like to switch the video method in MediaPlayer to TextureView 's Surface at some point during playback. 我想在播放过程中将MediaPlayer的视频方法切换到TextureViewSurface But all I get is a black screen (the sound is playing). 但是我得到的只是一个黑屏(声音正在播放)。 I made sure the size of the TextureView is ok, so it's not the case. 我确保TextureView的大小是可以的,所以不是这样。

If I set the Surface of TextureView before calling prepare on MediaPlayer , than the video is shown. 如果在MediaPlayer上调用prepare 之前设置TextureViewSurfaceTextureView显示视频。

So it seems that the order of calling prepare and applying the surface is crucial. 因此,似乎调用prepare和应用表面的顺序至关重要。

What's interesting, in case of SurfaceView everything works fine (no matter when I set the holder of SurfaceView : before or after the preparing is done). 有趣的是,在使用SurfaceView情况下,一切正常(无论何时设置SurfaceView的持有者:在准备工作之前或之后)。

Is there a way to set TextureView to MediaPlayer during playback? 有没有一种方法可以在播放过程中将TextureView设置为MediaPlayer? Calling MediaPlayer.release() and recreating it again while having to take care of progress would be very inconvenient. 调用MediaPlayer.release()并在必须照顾进度的情况下重新创建它非常不便。

@Override
    public void onSurfaceTextureAvailable(final SurfaceTexture surface, final int width, final int height) {
        s = new Surface(surface);
            Thread play = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {

                        player = new MediaPlayer();
                        player.setSurface(s);
                        player.setDataSource(vidAddress);
                        player.prepare();
                        player.setOnPreparedListener(MainActivity.this);
                        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        player.setOnCompletionListener(MainActivity.this);
                        player.setScreenOnWhilePlaying(true);

                        Log.e("mediaplayer", "true");
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (SecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
            play.start();

        }

And your onPrepared listener like this 而您的onPrepared监听器是这样的

public void onPrepared(MediaPlayer mp) {
        if (!player.isPlaying()) {
            player.start();     
        }
}

setSurfaceTextureListener like this at onCreate setSurfaceTextureListener像这样在onCreate

mTextureView.setSurfaceTextureListener(MainActivity.this);

I hope this will help :) 我希望这个能帮上忙 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 MediaPlayer.prepare()提供了IOException - MediaPlayer.prepare() is giving an IOException MediaPlayer.prepare()失败,并带有有效的http链接 - MediaPlayer.prepare() fails with a valid http link MediaPlayer.prepare()在Android L上抛出IllegalStateException - MediaPlayer.prepare() throws IllegalStateException on Android L MediaPlayer.prepare()抛出非法状态异常 - MediaPlayer.prepare() THROWS illegeal state exception Android从内部存储播放资源文件会导致MediaPlayer.prepare提供IOException - Android playing resource files from internal storage causes MediaPlayer.prepare to give IOException mediaplayer.prepare,如何避免吐司延迟。 “加载中” - mediaplayer.prepare, How to Avoid Toast delay. “Loading” 在图像渲染后,MediaPlayer无法渲染到TextureView - MediaPlayer cannot render to TextureView after image render 当我尝试下一首曲目时,MediaPlayer.Prepare()已被抛出 - MediaPlayer.Prepare() has been thrown when I try to next track Mediaplayer.prepare()因IllegalStateException而崩溃,仅适用于小米Note 3和小米Mi4 - Mediaplayer.prepare() crash with IllegalStateException, only for Xiaomi Note 3 & Xiaomi Mi4 在真实设备上进行Android渐进式媒体播放-MediaPlayer.prepare()永远存在 - Android progressive media playback on a real device - MediaPlayer.prepare() taking forever
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM