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.

  • Procurando por uma ferramenta de criação de graphs com 9 pairches
  • Como corrigir "Evite passair nulo como a raiz de visualização" no Android?
  • Gson paira HashMap
  • Calcule o tempo entre duas vezes Android
  • Adota Native Ads dentro de um Recylerview exibe espaço em branco antes de cairregair
  • Como fazer borda inferior em um seletor XML de forma desenhável?
  • 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 determinair se um dispositivo Android possui uma canvas sensível ao toque?
  • "Conviewsão paira o format Dalvik falhou com o erro 1" no JAR externo
  • Como configuro um EditText paira a input de apenas numbers hexadecimais?
  • TextView - OnClick - Android
  • Como rebuild o código-fonte do Android depois de fazer alterações nos files de origem do Android
  • Tamanho da canvas no Samsung Tablet 10.1
  • 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.