MediaPlayer.prepare导致黑屏后,将TextureView应用于MediaPlayer

时间:2015-10-28 08:23:23

标签: android android-mediaplayer textureview

我想在播放期间的某个时刻将MediaPlayer中的视频方式切换为TextureView的{​​{1}}。但我得到的只是一个黑屏(声音播放)。我确定Surface的大小没问题,所以事实并非如此。

如果我在TextureView上调用Surface之前设置TextureView prepare,则会显示视频。

所以看来调用MediaPlayer并应用表面的顺序至关重要。

有趣的是,如果prepare一切正常(无论我何时设置SurfaceView的持有人:在准备完成之前或之后)。

有没有办法在播放期间将TextureView设置为MediaPlayer?在必须处理进度的同时调用SurfaceView并重新创建它将非常不方便。

1 个答案:

答案 0 :(得分:1)

WAMP connection closed unreachable { reason: null,
  message: null,
  retry_delay: 1.8090544409276008,
  retry_count: 1,
  will_retry: true }

你的onPrepared听众就像这样

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

        }

onSreate

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

我希望这会有所帮助:)