0

Ich versuche, Videos mit camera2 api aufnehmen Aber wenn ich versuche Recorder Orientierung oder Medien zu setzen, wird das Video aufgezeichnet den Kopf Es funktioniert in Nexus5X in Ordnung, aber in anderen Telefonen Kopf es zeigt nach untenMediaRecorder Orientierung Hinweis

Wie die Ausrichtung richtig für mediarecorder so einzustellen, dass es für alle Geräte

Dank

+0

Sie möchten Dimension oder Ausrichtung korrigieren? versuchen, das für die Orientierung zu verwenden, kann dies Ihr Problem beheben mediaRecorder.setVideoSource (MediaRecorder.VideoSource.CAMERA); if (getResources(). GetConfiguration(). Orientation == Konfiguration.ORIENTATION_PORTRAIT) { if (! CameraFront) mediaRecorder.setOrientationHint (90); sonst mediaRecorder.setOrientationHint (270); } –

+0

Ich möchte Orientierung korrigieren Ich verwende mMediaRecorder.setVideoSource (MediaRecorder.VideoSource.SURFACE); –

+0

Wenn Sie camera2 api verwenden, können Sie direkt Kamera anstelle von Surface –

Antwort

0

gemäß der obigen Frage Anforderung arbeitet wir die Kamera Orientierung fixieren möchten, während der Videoaufnahme. Dies ist eines der herausfordernden Probleme, die ich mit dem gleichen Problem mit meinem Code habe.

Kamera.setDisplayOrientation (90);

Wird die Kamera um 90 Grad drehen und Dies kann dazu führen, dass die Orientierung für einige Geräte nicht geeignet ist.

Also versuche ich das auf diese Weise zu tun, hoffe der folgende Code wird Ihnen helfen.

Das erste, was wir tun wollen Vorschau der Kamera zu starten:

private void startCameraPreview() { 
    releaseCamera(); 
    if (!previewing) { 
     previewing = true; 

     try { 
      camera = Camera.open(cameraId); 
     } catch (Exception e) { 
      camera = null; 
     } 
     if (null == camera) { 
      Toast.makeText(this, "Camera unavailable! Please retry after restarting the phone.", Toast.LENGTH_SHORT).show(); 
     } 
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
      setOptimalPreviewSize(); 
     else 
      setLandScapOptimalPreviewSize(); 


     if (camera != null) { 
      if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
       camera.setDisplayOrientation(90); 
      try { 
       camera.setPreviewDisplay(previewSv.getHolder()); 
       camera.startPreview(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    callback = new SurfaceHolder.Callback() { 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      stopCameraPreview(); 
     } 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 

     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
      holder.removeCallback(callback); 
      if (previewing) { 
       stopCameraPreview(); 
      } 
      startCameraPreview(); 
     } 
    }; 
    previewSv.getHolder().addCallback(callback); 
} 

hier bei unter Code möchte ich für die optimale Vorschaugröße verwenden ich diese Funktion bin mit:

private void setOptimalPreviewSize() { 
    if (null != camera && null != previewSv) { 
     Camera.Parameters parameters = camera.getParameters(); 
     List<Camera.Size> sizes = null != parameters ? parameters.getSupportedPreviewSizes() : null; 
     if (null != sizes && previewSv.getWidth() > 0 && previewSv.getHeight() > 0) { 
      Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(sizes, dispSize.y, dispSize.x); 
      ViewGroup.LayoutParams params = previewSv.getLayoutParams(); 
      float aspectRatio = (float) optimalSize.width/(float) optimalSize.height; 
      params.width = dispSize.x; 
      params.height = (int) ((float) params.width * aspectRatio); 
      previewSv.setLayoutParams(params); 
      parameters.setPreviewSize(optimalSize.width, optimalSize.height); 
      camera.setParameters(parameters); 
      System.out.println("setOptimalPreviewSize() optimalSize=" + optimalSize); 
     } 
    } else { 
     System.err.println("setOptimalPreviewSize() failed - camera null"); 
    } 
} 

und für den Landschafts-Modus verwende ich, dass für die bevorzugen Größe

private void setLandScapOptimalPreviewSize() { 
    if (null != camera && null != previewSv) { 
     Camera.Parameters parameters = camera.getParameters(); 
     List<Camera.Size> sizes = null != parameters ? parameters.getSupportedPreviewSizes() : null; 
     if (null != sizes && previewSv.getWidth() > 0 && previewSv.getHeight() > 0) { 
      Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(sizes, dispSize.y, dispSize.x); 
      ViewGroup.LayoutParams params = previewSv.getLayoutParams(); 
      float aspectRatio = (float) optimalSize.width/(float) optimalSize.height; 
      params.height = dispSize.x; 
      params.width = (int) ((float) params.height * aspectRatio); 
      previewSv.setLayoutParams(params); 
      parameters.setPreviewSize(optimalSize.width, optimalSize.height); 
      camera.setParameters(parameters); 
      System.out.println("setOptimalPreviewSize() optimalSize=" + optimalSize); 
     } 
    } else { 
     System.err.println("setOptimalPreviewSize() failed - camera null"); 
    } 
} 

Jetzt nach meinem Projekt requi Ich muss die Videovorschau auf der Hälfte des Bildschirms und das Bild auf der Hälfte des Bildschirms öffnen, damit ich meine gesamte Aktivität mit Ihnen teilen, wo Sie den Code für das Bild löschen können, wenn Sie das nicht benötigen.

schaffen ein actvity ImageVideoActivity.java https://gist.github.com/anonymous/8c776a350098cb3346239dd72b5564b3

jetzt die XML https://gist.github.com/anonymous/bb9fe7c2b3a86e411f0323a06623ead8

hier ist Ihre BaseActvity.java

https://gist.github.com/anonymous/451336f3b0f420f8d01e6b4d6659762f

hier ist Ihre Kamera Hilfsklasse https://gist.github.com/anonymous/1018b5145d013aa5300b577010b1ca6b

hier ist Ihre TextureVideoView.java https://gist.github.com/anonymous/a7f7ba92d1548b867e4fd487083ab67a

Meine Konstanten Datei https://gist.github.com/anonymous/9419c64fbb0410a9a16248956ea096ac

Hoffnung diese Antwort lösen Ihre Problem.Wenn Sie stellen ein Problem mit Code mit comment.we zurückkommen versuchen, gemeinsam zu lösen. Guten Tag !!!