Я работаю над проектом видеоконференций. Мой видеодисплей использует поверхностный вид. Теперь во время видеовызова есть вероятность изменения соотношения сторон для входящих кадров. Поэтому я попробовал следующий код для этогоИзменение размера поверхности для изменения соотношения сторон в видеоизображении в android
public void surfaceResize() {
// WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Point size = new Point();
int screenWidth = 0;
//Get the SurfaceView layout parameters
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 parameters
} 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 parameters
// code to do for Portrait Mode
}
surflp.addRule(RelativeLayout.CENTER_HORIZONTAL);
surflp.addRule(RelativeLayout.CENTER_VERTICAL);
if(myVideoSurfaceView != null)
myVideoSurfaceView.setLayoutParams(surflp);
System.out.println("Surface resized*****************************************");
}
Все нормально, если я вызываю эту функцию в начале вызова. Моя проблема в том, что когда я вызываю эту функцию между вызовом для изменения соотношения сторон, для отображения следующего кадра требуется слишком много времени. Иногда видео застревает даже.
Я пытался уничтожить и воссоздать поверхность
myVideoSurface.setVisibility(VIEW.GONE);
Но поверхность не получает создан.
Я использую Mediacodec для декодирования видео. Я получаю уведомление при изменении разрешения.
Есть ли что-то большее, что я должен сделать для изменения размера поверхностиView, когда уже воспроизводится видео.
Спасибо за помощь .........................
Если ваш проблема решена, пожалуйста, примите ответ. Таким образом, вопрос не отображается в списке «без ответа». –
здесь хорошее [решение] (http://stackoverflow.com/a/33670521/2220110) –