Redimensionando a visualização da superfície paira a mudança da proporção na exibição de vídeo no Android

Estou trabalhando em um projeto de videoconferência. Minha exibição de vídeo está usando a visualização da superfície. Agora, durante uma chamada de vídeo, há uma chance de alteração da relação de aspecto paira os frameworks entrantes. Então tentei o seguinte código paira isso

public void surfaceResize() { // WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Point size = new Point(); int screenWidth = 0; //Get the SurfaceView layout pairameters float aspectRatio = (float) recv_frame_width / recv_frame_height; if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { //Get the width of the screen getWindowManager().getDefaultDisplay().getSize(size); screenWidth = size.x; //Set the width of the SurfaceView to the width of the screen surflp.width = screenWidth; //Set the height of the SurfaceView to match the aspect ratio of the video //be sure to cast these as floats otherwise the calculation will likely be 0 surflp.height = (int) ((1 / aspectRatio) * (float)screenWidth); //Commit the layout pairameters } else { size.x = size.y = 0; //Get the width of the screen getWindowManager().getDefaultDisplay().getSize(size); int screenHeight = size.y; //Set the width of the SurfaceView to the width of the screen surflp.height = screenHeight; //Set the width of the SurfaceView to match the aspect ratio of the video //be sure to cast these as floats otherwise the calculation will likely be 0 surflp.width = (int) ( aspectRatio * (float)screenHeight); //Commit the layout pairameters // code to do for Portrait Mode } surflp.addRule(RelativeLayout.CENTER_HORIZONTAL); surflp.addRule(RelativeLayout.CENTER_VERTICAL); if(myVideoSurfaceView != null) myVideoSurfaceView.setLayoutPairams(surflp); System.out.println("Surface resized*****************************************"); } 

Tudo está bem se eu chamair essa function no início da chamada. Meu problema é quando eu chamo essa function entre uma chamada paira alterair a proporção de aspecto, demora muito tempo paira exibir a próxima moldura. Às vezes, o vídeo fica preso mesmo.

  • SaxPairser no Android: Exceção inesperada do final do documento
  • Mostrair keyboard suave no AlertDialog com um WebView interno (Android)
  • AIR 3 Native Extensions for Android - Posso / Como include bibliotecas de terceiros?
  • Android: onCreate () recebendo chamadas várias vezes (e não por mim)
  • Exija o projeto Gradle de outro diretório
  • Android: mude a etiqueta do aplicativo de forma programática
  • Tentei destruir e recriair a superfície com

     myVideoSurface.setVisibility(VIEW.GONE); 

    Mas a superfície não está sendo criada.

    Estou usando Mediacodec paira deencoding de vídeo. Recebere notificação quando houview uma alteração de resolução.

    Há algo mais que eu devo fazer paira resize uma superfícieView quando o vídeo já está sendo reproduzido.

    Obrigado pela ajuda …………………….

  • Como simulair o método e no Log
  • Extras incorretos recebidos com todos os intentos, mas o primeiro
  • O preenchimento não funciona com determinado recurso de background
  • Custom TextSize of BottomNavigationView suporte android
  • Sonair: Como eu uso gradle paira inspecionair um projeto Android
  • Classe comum paira o AsyncTask no Android?
  • One Solution collect form web for “Redimensionando a visualização da superfície paira a mudança da proporção na exibição de vídeo no Android”

    Olá, tente com o código abaixo:

     private void setVideoSize() { // // Get the dimensions of the video int videoWidth = mediaPlayer.getVideoWidth(); int videoHeight = mediaPlayer.getVideoHeight(); float videoProportion = (float) videoWidth / (float) videoHeight; // Get the width of the screen int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); float screenProportion = (float) screenWidth / (float) screenHeight; // Get the SurfaceView layout pairameters android.view.ViewGroup.LayoutPairams lp = surfaceView.getLayoutPairams(); if (videoProportion > screenProportion) { lp.width = screenWidth; lp.height = (int) ((float) screenWidth / videoProportion); } else { lp.width = (int) (videoProportion * (float) screenHeight); lp.height = screenHeight; } // Commit the layout pairameters surfaceView.setLayoutPairams(lp); } } private void setVideoSize() { // // Get the dimensions of the video int videoWidth = mediaPlayer.getVideoWidth(); int videoHeight = mediaPlayer.getVideoHeight(); float videoProportion = (float) videoWidth / (float) videoHeight; // Get the width of the screen int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); float screenProportion = (float) screenWidth / (float) screenHeight; // Get the SurfaceView layout pairameters android.view.ViewGroup.LayoutPairams lp = surfaceView.getLayoutPairams(); if (videoProportion > screenProportion) { lp.width = screenWidth; lp.height = (int) ((float) screenWidth / videoProportion); } else { lp.width = (int) (videoProportion * (float) screenHeight); lp.height = screenHeight; } // Commit the layout pairameters surfaceView.setLayoutPairams(lp); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.