我试图允许用户录制与他们在录制时可以看到的实际屏幕预览不同大小的视频。这似乎可以从有关以下功能的getSupportedVideoSizes
功能的文档中获得:
如果返回的列表不为空,则返回的列表将包含至少一个 Size,并且如果使用相机作为视频源,则返回列表中的其中一个尺寸必须传递给 MediaRecorder.setVideoSize() 用于摄像机应用程序。在这种情况下,预览的大小可能与视频录制期间录制的视频的分辨率不同。
这表明某些手机会从此 fn 返回 null(根据我的经验 Galaxy SIII 会),但对于那些不这样做的人,可以提供与实际视频不同分辨率的预览。这种理解正确吗?有些手机允许这种行为而其他手机不允许吗?
尝试解决方案:
在漫长的录像设置过程中使用的该功能的官方说明中setPreviewDisplay
提到:
如果此方法以空表面调用或根本不调用,媒体记录器将不会更改相机的预览表面。
这似乎是我想要的,但不幸的是,如果我这样做,整个视频录制过程就完全搞砸了。我假设在录制视频的过程中,这个函数不能传递 null 或根本不调用。也许在其他情况下这是可以的。不幸的是,这似乎对我没有帮助。
我接下来的唯一步骤是查看TextureView
s 并使用预览纹理而不是典型的 SurfaceView 实现,以便使用 openGL 将纹理拉伸到与实际分辨率不同的所需大小(并裁剪屏幕上多余的部分) ,然后用 SurfacesetPreviewDisplay
的构造函数为函数Surface(SurfaceTexture surfaceTexture)
构造一个 Surface。由于在 ICS 下不兼容,我想避免使用 a TextureView
,因为这会增加显着的复杂性。
这似乎是一个微妙的过程,但我希望有人可以在这方面提供一些建议。
谢谢你。