【发布时间】:2012-12-17 10:34:14
【问题描述】:
我正在尝试允许用户录制与他们在录制时可以看到的实际屏幕预览大小不同的视频。 this documentation concerning the getSupportedVideoSizes function 似乎可以做到这一点:
如果返回的列表不为 null,则返回的列表将包含 at 返回列表中的至少一种尺寸和其中一种尺寸必须是 传递给摄像机应用程序的 MediaRecorder.setVideoSize() 如果 摄像机用作视频源。 在这种情况下, 预览可能与录制视频的分辨率不同 在视频录制期间。
这表明某些手机会从此 fn 返回 null(根据我的经验 Galaxy SIII 会),但对于那些不这样做的人,可以提供与实际视频不同分辨率的预览。这种理解正确吗?有些手机允许这种行为,有些则不允许吗?
尝试解决方案:
在lengthy process of setting up for video recording中使用的official description of the setPreviewDisplay函数中提到:
如果调用此方法时使用 null 表面或根本不调用,媒体 记录器不会改变相机的预览表面。
这似乎是我想要的,但不幸的是,如果我这样做,整个视频录制过程就会完全混乱。我假设这个函数在录制视频的过程中不能传递 null 或根本不调用。也许在其他情况下这是可以的。不幸的是,这似乎对我没有帮助。
我接下来的唯一步骤是查看TextureViews 并使用预览纹理而不是典型的 SurfaceView 实现,以便使用 openGL 将纹理拉伸到与实际分辨率不同的我想要的大小(并裁剪任何超出屏幕的部分),然后使用 Surface 的 Surface(SurfaceTexture surfaceTexture) 构造函数为 setPreviewDisplay 函数构造一个 Surface。我想避免使用TextureView,因为在 ICS 下不兼容,而且这增加了很大的复杂性。
这似乎是一个微妙的过程,但我希望有人能在这方面提供一些建议。
谢谢。
【问题讨论】:
-
你能解释一下“完全搞砸”是什么意思吗?
-
如果我没记错的话,这意味着预览表面变黑了,没有任何记录。
标签: android android-camera mediarecorder