2015-06-11 109 views
5

我有一個媒體數據源,我正在使用android MediaPlayer播放媒體。Android - 在多個視圖上渲染相同的視頻

如何將MediaPlayer的視頻輸出顯示在同一個Activity的多個視圖中,有沒有其他方法可以做到這一點?

我希望媒體的視頻部分在兩個不同的視圖呈現而不從數據源多次讀取。

目前代碼:

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

你有沒有得到過這個? –

回答

2

你當前播放到TextureView,接收在表面紋理的幀,然後使它們到視圖UI層。

一種方法是創建自己的SurfaceTexture來接收幀,然後使用OpenGL ES渲染幀,但不管您喜歡。有關示例,請參閱Grafika中的「來自相機的紋理」活動。它可以定位,旋轉和縮放來自相機的輸入;您可以輕鬆地將其更改爲從MediaPlayer接收輸入,並將紋理兩次渲染到SurfaceView上。

如果你想渲染到不同的視圖,你可以設置幾個TextureView並渲染它們。對每個視圖使用具有不同EGL表面的單個EGL上下文。

+0

以下是直接鏈接到相機的紋理:https://github.com/google/grafika/blob/master/src/com/android/grafika/TextureFromCameraActivity.java – Aggressor