这里有一些背景信息可以帮助解释这种情况。我的任务是建立一个白板应用程序。该应用程序需要设备的摄像头才能在直播中显示白板。该设备可以与白板成一定角度放置,但仍然显示"平面"图像。很像是在一个角度拍摄一张照片,然后将图像倾斜成平面,就好像你直接在它前面拍摄了照片一样。
我的问题是,是否可以扭曲相机预览的SurfaceView,这样我就可以录制扭曲图像的视频,而不是图像本身?
如果将其发送到TextureView,而不是SurfaceView,则可以应用变换矩阵。您可以在Grafika的PlayMovieActivity中看到一个微不足道的例子,其中adjustAspectRatio()
应用矩阵来设置视频的纵横比。
如果你不熟悉矩阵变换,可以看看这里的答案。
这假设你可以控制播放器,并且可以在视频的同时向它发送一个"偏斜这么多"的值。要修改实际视频,您需要在视频帧到达编码器的途中将变换应用于视频帧。一种方法是将预览发送到SurfaceTexture,用适当的变换在GLES四边形上绘制,并用MediaCodec编码器捕获GLES渲染。
在播放时,直接捕捉和倾斜它会更容易。