我正在尝试制作自定义相机活动。在MediaRecorder开始录制视频之前,一切都很顺利。预览水平拉伸没有明显的原因,如下所示。我试过更改预览大小和几个建议,但我找不到一个有效的解决方案。请任何想法!!
注意:我正在使用TextureView对象。
启动相机
sub subSub1_()
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[tab]"
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "111111111111"
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[roll up]"
end sub
启动媒体录像机
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mST = surface;
try {
mCamera.setDisplayOrientation(90);
mCamera.setPreviewTexture(mST);
mCamera.startPreview();
isReleased = false;
}catch(Exception e){}
//startVideoPreview();
}
非常感谢你
答案 0 :(得分:0)
您的应用有两个问题。
一,您应该选择适合您的预览尺寸。您在 onSurfaceTextureAvailable()中的代码依赖于默认值,这太过于乐观了。某些设备的预览大小有奇怪的默认值。特别是当您想要在曲面上显示实时预览时。您应该选择最佳预览大小(从Parameters.getSupportedPreviewSizes()返回的列表中)。最佳尺寸最适合给定的宽度和高度。最重要的因素是宽高比。但是,您也希望预览不要太小或太大。您可以选择getBestPreviewSize ()的简单示例。
第二个问题是MediaRecorder还设置了'预览'大小。每个CamcorderProfile都定义了一个特定的帧大小,当您选择它时,屏幕上的实时预览会相应地更改。您可以使用MediaRecorder.setVideoSize()覆盖此项,但如果此大小不适合所选的CamcorderProfile,则您的录制可能会被破坏。
并非所有支持的预览尺寸都可用于视频录制(请参阅Parameters.getSupportedVideoSizes())。因此,如果您打算打算录制视频,则应选择MediaRecorder可以使用的最佳预览尺寸,并确保以这种方式设置Camera和MediaRecorder。
最后,请注意您正在使用已弃用的 Camera API。如果您的目标设备是Lollipop及以上,请考虑切换到camera2 API。