2017-05-20 1 views
3

사례 1 : 그래서 여기GlSurfaceView setZMediaOrder의 원인이 비디오는 부모 이외의 재생

GLSurfaceView 
| 
FrameLayout 
| 
TextureView 
| 
VideoRecording 

내가 그 위에 사각형 FrameLayout를 사용자의 입력에 따라 GLSurfaceView 추가하고있다 (치수 설정 layoutparams를 사용하여) 새로 추가 된 FrameLayout의 상단에 TextureView을 추가 한 다음 비디오를 녹화합니다. 예상대로 카메라 선택에 관계없이 정사각형 미리보기가 나타납니다.

대소 2 : 케이스 (1)

GLSurfaceView 
| 
FrameLayout 
| 
GLSurfaceView 
| 
VideoPlayback

이미부터 TextureView 제거하여 I 다른 GLSurfaceView 첨가하고 비디오를 기록 후 FrameLayout 첨가. 이전, 난 그냥 모든 비디오없이 재생의 소리를들을 수 있지만, 나중에 내가
setZOrderMediaOverlay(true);
또는 setZOrderOnTop(true)

을 사용하고있는 예를 건너 왔어요 이제 9 년 재생, 대신 부모 내에서 재생 비디오 재생,/16 종횡비. 앞서 언급했듯이 예상 동작은 정사각형 비디오 (FrameLayout의 크기)입니다.

새로 추가 된 비디오를 부모님의 경계를 벗어나지 않고 어떻게 배경 비디오 위에 가져올 수 있습니까?

MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new MediaPlayer.OnVideoSizeChangedListener() { 

     @Override 
     public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

      setAspectRatio(mp, width, height); 

     } 
    }; 

그리고 방법을 생성하고 설정합니다

답변

0

내가 대신 프레임 레이아웃의 상대 레이아웃을 사용하여 무게 중심을 설정하고이 코드를 구현하고, 그에 따라 미디어 플레이어 화면 비율을 확인해야하고 설정 생각 비디오 레이아웃 매개 변수는 다음과 같습니다.

private void setAspectRatio(MediaPlayer mediaPlayer, int videoWidth, int videoHeight) 
{ 
    if(mediaPlayer != null) 
    { 

     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     int height = displayMetrics.heightPixels; 
     int width = displayMetrics.widthPixels; 

     ViewGroup.LayoutParams videoParams = getLayoutParams(); 


     if (videoWidth > videoHeight) 
     { 
      videoParams.width = width; 
      videoParams.height = width * videoHeight/videoWidth; 
     } 
     else 
     { 
      videoParams.width = height * videoWidth/videoHeight; 
      videoParams.height = height; 
     } 

     // Commit params 
     surfaceView.setLayoutParams(videoParams); 
    } 
} 
+0

죄송합니다. 표면의 크기를 조정하는 데 대한 질문이 아닙니다. –