Dan*_*ith 27 android android-camera mediarecorder
我试图允许用户录制与录制时可以看到的实际屏幕预览不同的视频.这似乎可以从这个有关getSupportedVideoSizes功能的文档中说明:
如果返回的列表不为null,则返回的列表将包含至少一个Size,如果将摄像机用作视频源,则返回列表中的一个大小必须传递给MediaRecorder.setVideoSize()以用于摄像机应用程序.在这种情况下,预览的大小可以与视频记录期间记录的视频的分辨率不同.
这表明某些手机将从此fn返回null(根据我的经验,Galaxy SIII会这样做),但对于那些不这样做的手机,可以提供与实际视频不同的分辨率的预览.这种理解是否正确?有些手机允许这种行为吗?
尝试解决方案:
在功能的官方描述中setPreviewDisplay,用于设置视频录制的漫长过程中,提到:
如果使用null surface调用此方法或根本不调用此方法,则介质记录器将不会更改摄像机的预览表面.
这似乎是我想要的,但不幸的是,如果我这样做,整个视频录制过程完全搞砸了.我假设在录制视频的过程中,此函数不能传递null或根本不调用.也许在其他情况下这是可以的.不幸的是,这似乎对我没有帮助.
我唯一接下来的步骤是查看TextureViews并使用预览纹理而不是典型的SurfaceView实现,以便使用openGL将纹理拉伸到我想要的大小(与实际分辨率不同)(并裁剪屏幕上的任何多余部分) ,然后使用Surface setPreviewDisplay的Surface(SurfaceTexture surfaceTexture)构造函数为该函数构造一个Surface.我想避免使用TextureViewICS下面的不兼容性,也因为这会增加显着的复杂性.
这似乎是一个微妙的过程,但我希望有人可以在这方面提供一些建议.
谢谢.
小智 2
a.假设用户设置x,y的大小为视频大小
b.现在使用 getSupportedVideoSizes 函数获取整个列表并查看 x,y 是否属于其中之一并设置 MediaRecorder.setVideoSize()。如果 x,y 不属于 getSupportedVideoSizes 列表,则设置视频的默认配置文件记录。
这是关于视频大小的
现在谈到预览尺寸,没有太多解决方法选项。采用保存 SurfaceView 的relativelayout。
<android.view.SurfaceView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
Preview 是 SurfaceView 的名称。在这里,我给出了将其大小重新调整为宽度和高度的一半的示例。
resetCamera(); //reset the camera
ViewGroup.LayoutParams params = preview.getLayoutParams();
RelativeLayout myRelLayout = (RelativeLayout) findViewById(R.id.myRelLayout);
params.width = (int) (myRelLayout.getWidth()/2);
params.height = (int)(myRelLayout.getHeight()/2);
preview.setLayoutParams(params);
initCamera(); //initiate the camera(open camera, set parameter, setPreviewDisplay,startPreview)
Run Code Online (Sandbox Code Playgroud)
请查看预览的分辨率,然后根据视频尺寸相应缩小高度或宽度。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |