2015-10-28 159 views
0

我想在中將視頻方法切換爲TextureViewSurface。但我得到的只是一個黑屏(聲音在播放)。我確定TextureView的大小沒問題,所以情況並非如此。在MediaPlayer.prepare之後將TextureView應用於MediaPlayer會導致黑屏

如果我設置TextureViewSurface呼籲MediaPlayerprepare之前,比視頻顯示。

所以看起來調用prepare和應用表面的順序是至關重要的。

有趣的是,在SurfaceView的情況下,一切正常(不管當我設置SurfaceView的持有者:準備完成之前還是之後)。

有沒有辦法在播放期間將TextureView設置爲MediaPlayer?調用MediaPlayer.release()並重新創建它,同時不得不照顧進度將是非常不方便的。

回答

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像在的onCreate

mTextureView.setSurfaceTextureListener(MainActivity.this); 

我希望這將有助於:)

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

setSurfaceTextureListener這樣

相關問題