2016-10-12 1 views
0

내 활동에 두 개의 TextureView (s)을 표시해야하는 응용 프로그램을 작성하고 있습니다. 나는 onSurfaceTextureAvailable() 안에 다음 코드를 사용 MediaPlayer 객체를 사용하여 TextureView 인스턴스의 각 비디오를 부착하고있다 :onSurfaceTextureAvailable을 호출하는 방법 TextureView가 호출됩니다

@Override 
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 

    Surface surface = new Surface(surfaceTexture); 

    mMediaPlayer1 = new MediaPlayer(); 

    try { 
     mMediaPlayer1.setDataSource(<filePath>); 
    } catch (IOException e) { 
     Log.e(TAG, "Unable to load the file from the file system", e); 
     return; 
    } 

    mMediaPlayer1.setSurface(surface); 
    mMediaPlayer1.setLooping(true); 
    mMediaPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      isPlaybackReady = true; 
     } 
    }); 

    mMediaPlayer1.prepareAsync(); 
} 

을 지금, 나는이 TextureView의 두 인스턴스가있는 경우, 내가 onSurfaceTextureAvailable(...)에 콜백하는 TextureView에 대해 알고 얼마나.

다른 방법은 TextureView.getSurfaceTexture()를 호출하여 관련 SurfaceTexture 이상 보류를 얻어서, 설정에 onSurfaceTextureAvailable(...) 외부 MediaPlayer 객체입니다. 나는 그것을 시도했지만 항상 null을 반환합니다. 이 일을 위해 내가해야 할 일이 있습니까?

답변

1

다른 수신기로 두 개의 TextureView 인스턴스를 설정할 수 있습니다.

textureView1.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { 
    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 
     doSomething(textureView1, surfaceTexture, i, i1); 
    } 
    // implement other methods 


    }); 

textureView2.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { 
    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 
     doSomething(textureView2, surfaceTexture, i, i1); 
    } 

    // implement other methods 
    }); 

}

+0

는 어떻게 그것을 놓칠 수 있습니다. 고마워요 !!! – Swapnil

관련 문제