在Android中录制大小为480 * 480像素的视频?

时间:2014-02-04 11:10:41

标签: android video-capture vine

我已经构建了一个类似于vine app视频录制的模块。但我无法将视频大小设置为480x480像素。有没有办法做到这一点。感谢

2 个答案:

答案 0 :(得分:1)

Android相机的相机可用尺寸列表有限。因此,我们需要选择最佳相机尺寸并从原始相机图像中选择子图像(480x480)。 例如,在我的HTC one m8上,我有相机尺寸:

  1. 1920×1088
  2. 1920×1080
  3. 1808x1080
  4. ....
  5. 720×480
  6. 640×360
  7. 640×480
  8. 576x432
  9. 分辨率480x320
  10. 384x288
  11. 352×288
  12. 320×240
  13. 240x160
  14. 176×144
  15. 您可以使用getSupportedPreviewSizes()方法检索可用尺寸列表。

    public Camera mCamera;//Your camera instance
    public List<Camera.Size> cameraSizes;
    private final int CAMERA_IMAGE_WIDTH = 480;
    private final int CAMERA_IMAGE_HEIGHT = 480;
    ...
    
    cameraSizes = mCamera.getParameters().getSupportedPreviewSizes()
    

    之后,您需要找到最合适的相机尺寸并设置相机的预览尺寸。

    Camera.Size findBestCameraSize(int width, int height){
      Camera.Size bestSize = cameraSizes.get(0);
      int minimalArea = bestSize.height * bestSize.width;
      for(int i = 1;i < cameraSizes.size();i++){
        Camera.Size size = cameraSizes.get(i);
    
        int area = size.height * size.width;
        if(size.width < width || size.height < height){
          continue;
        }
    
        if(area < minimalArea){
          bestSize = size;
          minimalArea = area;
        }
      }
      return bestSize;
    }
    
    ...
    SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
      public void surfaceCreated(SurfaceHolder holder) {
        //Do something
      }
    
      public void surfaceChanged(SurfaceHolder holder,
                                 int format, int width,
                                 int height) {
        Camera.Parameters params = mCamera.getParameters();
        Camera.Size size = findBestCameraSize(CAMERA_IMAGE_WIDTH, CAMERA_IMAGE_HEIGHT);
        params.setPreviewSize(size.width, size.height);
        camera.setParameters(params);
        if(mCamera != null){
          mCamera.startPreview();
        }
      }
    
      public void surfaceDestroyed(SurfaceHolder holder) {
        // Do something
      }
      };    
    

    设置相机尺寸后,我们需要从相机中获取结果位图的子图像。您需要将此代码放在您收到位图图片的位置(通常我使用OpenCV库和矩阵以获得更好的性能)。

    Bitmap imageFromCamera = //here ve receive image from camera.
    Camera.Size size = mCamera.getParameters().getPreviewSize();
    int x = (size.width - CAMERA_IMAGE_WIDTH)/2;
    int y = (size.height - CAMERA_IMAGE_HEIGHT)/2;
    Bitmap resultBitmap = null;
    if(x < 0 || y < 0){
       resultBitmap = imageFromCamera;
    }else{
       resultBitmap = Bitmap.createBitmap(imageFromCamera, x, y, CAMERA_IMAGE_WIDTH, CAMERA_IMAGE_HEIGHT);
    }
    

答案 1 :(得分:0)

Android的视频捕捉分辨率仅限于相机支持的原始分辨率。

您可以尝试使用第三方库进行视频后期处理。因此,您可以裁剪或重新缩放相机拍摄的视频。

我正在使用这个

android-gpuimage-videorecording

并且效果很好。