Где хранится разрешение видео в android?
Я автоматизирую одно из видео-приложений в android. Для этого мне нужно установить максимальное разрешение видео.
Я знаю, что в обычной камере я могу установить значения в
/data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml
Но значения, которые я там установил, просто установлены для камеры, а не для видео. Есть идеи, где хранятся значения разрешения видео?
Если есть какая-либо команда ADb для хранения разрешения кодирования видео, то это было бы еще лучше.
Ниже приведена команда adb, которую я использовал, но работает ли nto:
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
Недавно я также обнаружил, что
/data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml
Файл содержит значение для самого высокого разрешения и имя ключа: : "pref_video_quality_key", но так или иначе, он только устанавливает значение камеры назад и не делает значение фронтальной камеры
1 ответ:
Вам не нужно искать это, но спросите систему.
Каждое устройство имеет своего рода поддерживаемые разрешения. Вы можете выбрать наилучший доступный размер для ваших требований:
Что делать?
Шаг 1.
Вы должны проверить поддерживаемые размеры. Вы можете сделать это с помощью
Camera.Parameters p = myCamera.getParameters(); List<Size> previewsizes = p.getSupportedPreviewSizes(); List<Size> videosizes = p.getSupportedVideoSizes();
И затем, вы можете выбрать один. Если вы хотите автоматизировать это, вы можете пойти дальше и следовать
Шаг 2
Напишите функцию для выбора наилучший доступный размер, который получит поддерживаемые размеры и желаемый размер. Вы можете получить размер, отношение которого ближе к желаемому, и если ни один не достаточно хорош, вы получаете тот, высота которого близка к желаемому, или вы можете получить только самый большой что-то вроде:
public static final int BEST_RATIO=0; public static final int IMPORTANT_HEIGHT=2; public static final int IMPORTANT_WIDTH=1; public static final int BIGGEST=3; private Size getOptimalPreviewSize(List<Size> sizes, int w, int h, int mode) { final double ASPECT_TOLERANCE = 0.2; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; if (mode==BEST_RATIO) { for (Size size : sizes) { Log.d("Camera", "Checking size " + size.width + "w " + size.height + "h"); double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } if (mode= IMPORTANT_HEIGHT) { //you can do other for width minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } if (mode=IMPORTANT_WIDTH) { //you can do other for width minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.Width - targetWidth) < minDiff) { optimalSize = size; minDiff = Math.abs(size.Width - targetWidth); } } } else { minDiff = 0; for (Size size : sizes) { if ( size.height * size.width > minDiff ) { optimalSize = size; minDiff = size.height * size.width ; } } } return optimalSize; }
И на последнем шаге задайте параметры
Шаг 3
private int desiredwidth=640, desiredheight=360; Size optimalPreviewSize = getOptimalPreviewSize(previewsizes, desiredwidth, desiredheight,BIGGEST); Size optimalVideoSize = getOptimalPreviewSize(videosizes, desiredwidth, desiredheight,BIGGEST); p.setPreviewSize(optimalPreviewSSize.width, optimalPreviewSSize.height); CamcorderProfile profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_LOW); profile.videoFrameHeight= optimalVideoSize.height; profile.videoFrameWidth=optimalVideoSize.with; mCamera.unlock(); mMediaRecorder.setCamera(mCamera); mMediaRecorder = new MediaRecorder(); mMediaRecorder.setVideoSize(optimalVideoSize.width, optimalVideoSize.height); myCamera.setParameters(p);