android中的扩展相机视图?
我在应用程序中使用的摄影机视图与本机摄影机不同,例如,本机摄影机视图如下所示, 但在我的应用程序中,视图不一样,我使用surfaceview为我的自定义相机和媒体录像机捕获视频,在布局中我使用帧布局android中的扩展相机视图?,android,android-layout,Android,Android Layout,我在应用程序中使用的摄影机视图与本机摄影机不同,例如,本机摄影机视图如下所示, 但在我的应用程序中,视图不一样,我使用surfaceview为我的自定义相机和媒体录像机捕获视频,在布局中我使用帧布局 <Button android:id="@+id/widget34" android:background="@drawable/camrecord" android:layout_height="60dp" android:layout_width="60dp"
<Button android:id="@+id/widget34" android:background="@drawable/camrecord"
android:layout_height="60dp" android:layout_width="60dp"
android:layout_gravity="right" android:layout_marginRight="20dp">
</Button>
<Button android:id="@+id/widget33" android:background="@drawable/stoprecord"
android:layout_gravity="right" android:layout_height="60dp"
android:layout_width="60dp" android:layout_marginTop="-60dp"
android:layout_marginRight="20dp">
</Button>
我尝试使用预定义的屏幕高度和屏幕宽度查看,但它再次似乎有些拉伸,这是我的拉伸相机视图,
我如何解决这个问题,如果有人知道这个问题,请帮我解决
谢谢。看起来长宽比已经不存在了。 尝试更改相机的预设分辨率 在摄像机参数上调用
setPreviewSize
,并在摄像机设备上设置摄像机参数。重新启动预览
编辑:添加代码
mCameraDevPara.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
mCameraDev.setParameters(mCameraDevPara);
mMediaRecoder.setCamera(mCameraDev);
PREVIEW\u WIDTH
和PREVIEW\u HEIGHT
应该是您想要设置的预览分辨率的宽度和高度。最后,我通过设置videEncodingBitRate、AudioEncodingBitRate、AudioSamplingRate等,找到了在android 2.1中录制高质量视频的代码。使用此方法,您可以设置视频的属性,以提供高质量的视频
有关设置高质量和低质量参数的信息,请参阅本页
下面是我在安卓2.1基础版本中用来制作高质量视频的代码
recorder = new MediaRecorder();
Method[] methods = recorder.getClass().getMethods();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoFrameRate(24);
recorder.setVideoSize(720, 480);
for (Method method : methods) {
try {
if (method.getName().equals("setAudioChannels")) {
method.invoke(recorder, String.format("audio-param-number-of-channels=%d", 1));
} else if (method.getName().equals("setAudioEncodingBitRate")) {
method.invoke(recorder, 12200);
} else if (method.getName().equals("setVideoEncodingBitRate")) {
method.invoke(recorder, 3000000);
} else if (method.getName().equals("setAudioSamplingRate")) {
method.invoke(recorder, 8000);
} else if (method.getName().equals("setVideoFrameRate")) {
method.invoke(recorder, 24);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
如何设置MediaRecorder的预览大小您需要在
Camera
对象上设置预览大小,然后通过setCamera
方法将Camera对象传递给MediaRecorder
。简单地说,您可以针对特定摄影机对象设置预览分辨率,然后将该摄影机对象传递给mediarecorder。另外,请确保在xml中定义的曲面视图的宽度和高度与预览分辨率相同。我已添加了代码,请先使用标准分辨率(如VGA[640x480]),这样可以保持纵横比,但如果设备屏幕大于VGA,则可能无法填充设备屏幕。希望有帮助。我如您所说添加了,但在开始录制recorder.start()时,它显示以下错误06-15 16:20:49.862:error/AndroidRuntime(10837):java.lang.IllegalStateException 06-15 16:20:49.862:error/AndroidRuntime(10837):在android.media.MediaRecorder.start(本机方法)上,能否使用getPreferredPreviewSizeForVideo
返回的大小。还可以使用与要录制的视频大小相同的纵横比设置预览大小。
recorder = new MediaRecorder();
Method[] methods = recorder.getClass().getMethods();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoFrameRate(24);
recorder.setVideoSize(720, 480);
for (Method method : methods) {
try {
if (method.getName().equals("setAudioChannels")) {
method.invoke(recorder, String.format("audio-param-number-of-channels=%d", 1));
} else if (method.getName().equals("setAudioEncodingBitRate")) {
method.invoke(recorder, 12200);
} else if (method.getName().equals("setVideoEncodingBitRate")) {
method.invoke(recorder, 3000000);
} else if (method.getName().equals("setAudioSamplingRate")) {
method.invoke(recorder, 8000);
} else if (method.getName().equals("setVideoFrameRate")) {
method.invoke(recorder, 24);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);