【问题标题】:Applying TextureView to MediaPlayer after MediaPlayer.prepare causes black screen在 MediaPlayer.prepare 之后将 TextureView 应用到 MediaPlayer 会导致黑屏
【发布时间】:2015-10-28 08:23:23
【问题描述】:

我想在播放过程中的某个时刻将MediaPlayer 中的视频方法切换为TextureViewSurface。但我得到的只是黑屏(声音正在播放)。我确定TextureView 的大小没问题,所以不是这样。

如果我设置SurfaceTextureView 之前 调用prepareMediaPlayer,然后显示视频。

所以看来调用prepare和应用表面的顺序很关键。

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

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

【问题讨论】:

    标签: android android-mediaplayer textureview


    【解决方案1】:
    @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();
    
            }
    

    你的 onPrepared 监听器就是这样

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

    setSurfaceTextureListener like this at onCreate

    mTextureView.setSurfaceTextureListener(MainActivity.this);
    

    我希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2018-03-21
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多