视频分辨率在哪里存储在Android中?

前端之家收集整理的这篇文章主要介绍了视频分辨率在哪里存储在Android中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 android自动执行一个视频应用程序.为了做到这一点,我需要将视频分辨率设置为最高.

我知道在常规相机中,我可以设置值

  1. /data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml

但是我设置的值只是为相机而不是视频.任何存储视频分辨率值的想法?

如果有任何ADb命令存储视频编码解析,那将会更好.

以下是我使用的adb命令,但是似乎不起作用:

  1. adb shell am start -a android.media.action.VIDEO_CAPTURE --ei android.intent.extras.CAMERA_FACING 1 --ei android.intent.extras.EXTRA_VIDEO_QUALITY 1 -n com.android.gallery3d/com.android.camera.CameraActivity

我最近也发现了

  1. /data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml

文件包含最高分辨率的值,键名为:
“pref_video_quality_key”,但不知何故,它只能设置相机的值,而不是前置摄像头的值

解决方法

你不必去寻找,而是问系统.

每个设备都有一种支持的分辨率.您可以根据您的要求选择最适合的尺寸:

该怎么办?

步骤1.

您必须检查支持的尺寸.你可以做到这一点

  1. Camera.Parameters p = myCamera.getParameters();
  2. List<Size> previewsizes = p.getSupportedPreviewSizes();
  3. List<Size> videosizes = p.getSupportedVideoSizes();

然后,你可以选择一个.如果你想自动化这个,你可以进一步,并按照

第2步

写一个功能来选择最佳可用尺寸,这将获得支持的尺寸和所需的尺寸.哟可以得到比例更接近所需的大小,如果没有一个是足够好的,你会得到一个高度关闭到所需的高度,或者你可以得到最大的东西,如:

  1. public static final int BEST_RATIO=0;
  2. public static final int IMPORTANT_HEIGHT=2;
  3. public static final int IMPORTANT_WIDTH=1;
  4. public static final int BIGGEST=3;
  5.  
  6. private Size getOptimalPreviewSize(List<Size> sizes,int w,int h,int mode) {
  7. final double ASPECT_TOLERANCE = 0.2;
  8. double targetRatio = (double) w / h;
  9. if (sizes == null)
  10. return null;
  11.  
  12. Size optimalSize = null;
  13. double minDiff = Double.MAX_VALUE;
  14.  
  15. int targetHeight = h;
  16.  
  17. if (mode==BEST_RATIO)
  18. { for (Size size : sizes) {
  19. Log.d("Camera","Checking size " + size.width + "w " + size.height
  20. + "h");
  21. double ratio = (double) size.width / size.height;
  22. if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
  23. continue;
  24. if (Math.abs(size.height - targetHeight) < minDiff) {
  25. optimalSize = size;
  26. minDiff = Math.abs(size.height - targetHeight);
  27. }
  28. }
  29. }
  30.  
  31.  
  32. if (mode= IMPORTANT_HEIGHT) { //you can do other for width
  33. minDiff = Double.MAX_VALUE;
  34. for (Size size : sizes) {
  35. if (Math.abs(size.height - targetHeight) < minDiff) {
  36. optimalSize = size;
  37. minDiff = Math.abs(size.height - targetHeight);
  38. }
  39. }
  40. }
  41. if (mode=IMPORTANT_WIDTH) { //you can do other for width
  42. minDiff = Double.MAX_VALUE;
  43. for (Size size : sizes) {
  44. if (Math.abs(size.Width - targetWidth) < minDiff) {
  45. optimalSize = size;
  46. minDiff = Math.abs(size.Width - targetWidth);
  47. }
  48. }
  49. }
  50.  
  51. else {
  52. minDiff = 0;
  53. for (Size size : sizes) {
  54. if ( size.height * size.width > minDiff ) {
  55. optimalSize = size;
  56. minDiff = size.height * size.width ;
  57. }
  58. }
  59. }
  60. return optimalSize;
  61. }

最后一步,设置参数

步骤3

  1. private int desiredwidth=640,desiredheight=360;
  2.  
  3. Size optimalPreviewSize = getOptimalPreviewSize(previewsizes,desiredwidth,desiredheight,BIGGEST);
  4.  
  5. Size optimalVideoSize = getOptimalPreviewSize(videosizes,BIGGEST);
  6.  
  7. p.setPreviewSize(optimalPreviewSSize.width,optimalPreviewSSize.height);
  8. CamcorderProfile profile = CamcorderProfile.get(cameraid,CamcorderProfile.QUALITY_LOW);
  9. profile.videoFrameHeight= optimalVideoSize.height;
  10. profile.videoFrameWidth=optimalVideoSize.with;
  11. mCamera.unlock();
  12. mMediaRecorder.setCamera(mCamera);
  13. mMediaRecorder = new MediaRecorder();
  14. mMediaRecorder.setVideoSize(optimalVideoSize.width,optimalVideoSize.height);
  15. myCamera.setParameters(p);

猜你在找的Android相关文章