gpt4 book ai didi

android - 视频分辨率存储在android中的哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:05 24 4
gpt4 key购买 nike

我正在自动化 android 中的视频应用程序之一。为此,我需要将视频分辨率设置为最高。

我知道在普通相机中,我可以设置值

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

但我在那里设置的值只是为相机设置的,而不是为视频设置的。知道视频分辨率值存储在哪里吗?

如果有ADb指令存储视频编码分辨率就更好了。

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

 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”但不知何故,它只设置后置摄像 header value 而不设置前置摄像 header value

最佳答案

您不必寻找它,但可以询问系统。

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

要做什么?

第 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);

关于android - 视频分辨率存储在android中的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20413552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com