¿Dónde está la resolución de vídeo almacenada en android?
Estoy automatizando una de las aplicaciones de vídeo en android. Para hacerlo, necesito ajustar la resolución de vídeo a la más alta.
Sé que en cámara normal, puedo establecer los valores en
- Android: onAutoFocus () no está desencadenando en android 4.0 (sandwich de helado) dispositivo virtual
- Algunos tamaños de imagen que causan la falla de Camera.takePicture ()
- Hacer una aplicación de cámara con Android utilizando la API de cámara que funcionará en todos los dispositivos
- Java libgdx mover la cámara de perspectiva
- Cámara personalizada android
/data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml
Pero los valores que establezco allí sólo se establecen para la cámara no para el vídeo. ¿Alguna idea de dónde se almacenan los valores de resolución de vídeo?
Si hay cualquier comando ADb para almacenar la resolución de codificación de vídeo, entonces sería aún mejor.
A continuación se muestra el comando adb que usé pero no parece funcionar:
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
También he encontrado recientemente que
/data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml
File contiene el valor de la resolución más alta y el nombre de la clave es: "pref_video_quality_key", pero de alguna manera, sólo restablece el valor de la cámara y no hace el valor de la cámara frontal
- Apertura de la cámara en un proceso diferente
- Graba, guarda y reproduce un video en Android
- Snooker Aplicación para Android
- Android - cámara como detector de movimiento
- Cámara incorporada, usando el MediaStore.EXTRA_OUTPUT extra almacena imágenes dos veces (en mi carpeta, y en el defecto)
- Manera correcta de calcular el mejor tamaño de vista previa de la cámara
- La visualización / visualización de la cámara en pantalla completa no mantiene la relación de aspecto: la imagen está sesgada, estirada para encajar en la pantalla
- Camera parameters.setFocusMode no funciona
Usted no tiene que buscar eso, pero pide el sistema.
Cada dispositivo tiene una especie de resoluciones compatibles. Puede seleccionar el mejor tamaño disponible para sus necesidades:
¿Qué hacer?
Paso 1.
Usted tiene que comprobar para los tamaños apoyados. Puedes hacerlo con
Camera.Parameters p = myCamera.getParameters(); List<Size> previewsizes = p.getSupportedPreviewSizes(); List<Size> videosizes = p.getSupportedVideoSizes();
Y luego, puede elegir uno. Si desea automatizar esto, puede ir más lejos y seguir las
Paso 2
Escriba una función para seleccionar el mejor tamaño disponible, que recibirá los tamaños admitidos y el tamaño deseado. Yo puede obtener el tamaño cuya relación es más cercana a la deseada, y si ninguno es lo suficientemente bueno, se obtiene el que la altura se cierra a la deseada, o puede obtener sólo el mayor algo como:
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; }
Y el último paso, establecer los parámetros
Paso 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);
- Fragmento Transacción cargar la vista vacía, pero el fragmento se muestra después de que el dispositivo giratorio
- SecurityException lanzada al llamar a WifiManager startScan