开始视频录制时预览延伸

时间:2017-10-30 23:27:26

标签: java android camera mediarecorder textureview

我正在尝试制作自定义相机活动。在MediaRecorder开始录制视频之前,一切都很顺利。预览水平拉伸没有明显的原因,如下所示。我试过更改预览大小和几个建议,但我找不到一个有效的解决方案。请任何想法!!

注意:我正在使用TextureView对象。

录制前预览 preview before recording

录制时预览 preview while recording

启动相机

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();
}

非常感谢你

1 个答案:

答案 0 :(得分:0)

您的应用有两个问题。

一,您应该选择适合您的预览尺寸。您在 onSurfaceTextureAvailable()中的代码依赖于默认值,这太过于乐观了。某些设备的预览大小有奇怪的默认值。特别是当您想要在曲面上显示实时预览时。您应该选择最佳预览大小(从Parameters.getSupportedPreviewSizes()返回的列表中)。最佳尺寸最适合给定的宽度和高度。最重要的因素是宽高比。但是,您也希望预览不要太小或太大。您可以选择getBestPreviewSize ()的简单示例。

第二个问题是MediaRecorder还设置了'预览'大小。每个CamcorderProfile都定义了一个特定的帧大小,当您选择它时,屏幕上的实时预览会相应地更改。您可以使用MediaRecorder.setVideoSize()覆盖此项,但如果此大小不适合所选的CamcorderProfile,则您的录制可能会被破坏。

并非所有支持的预览尺寸都可用于视频录制(请参阅Parameters.getSupportedVideoSizes())。因此,如果您打算打算录制视频,则应选择MediaRecorder可以使用的最佳预览尺寸,并确保以这种方式设置Camera和MediaRecorder。

最后,请注意您正在使用已弃用的 Camera API。如果您的目标设备是Lollipop及以上,请考虑切换到camera2 API。