Grafika 和 OpenGL 在 android 上以方形录制视频

Posted

技术标签:

【中文标题】Grafika 和 OpenGL 在 android 上以方形录制视频【英文标题】:Grafika and OpenGL to record a video on android in square shape 【发布时间】:2015-12-31 18:48:57 【问题描述】:

我目前正在尝试以方形录制视频并将输出创建为 .mp4。似乎真的很有挑战性。我尝试了不同的方法,包括:OnPreviewFrame 和 FFMpeg。但一直没有得到满意的结果。今天我找到了Grafika。这似乎是正确的方法。但是由于代码的复杂性,我现在被困住了。使用示例:CameraCaptureActivity.java 我设法录制了视频。但它的形状是长方形而不是正方形。此外,相机旋转了 90 度。我已经在尝试操纵某些参数,但从来没有得到一个好的视频。一些被挤压的地方等等。

有人知道我需要在 Grafikas 示例中更改哪些参数才能获得正确的结果吗? 最后,我的 android 手机的摄像头应该会录制 Vine 或 Instagram 等视频。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

一些注意事项:

    CameraCaptureActivity 很复杂,因为它试图使用 GLSurfaceView(最初是为了回答 this question)。 ContinuousCaptureActivity 是更好的选择。

    您通常无法通过设置相机参数将相机预览限制为任意形状。您必须接受它提供给您的图像或视频帧,然后修改它们以使其看起来像您想要的那样。在您的情况下,这意味着剥离顶部/底部或左/右边缘。

    我很确定 Instagram 不再是严格的正方形。所以你可能落后于时代。 :-)

Grafika 代码通过将相机输入 SurfaceTexture 来工作,这会将相机帧转换为 GLES 纹理。然后,您可以随心所欲地渲染纹理。选择正方形,修改纹理坐标,就可以得到正方形视频了。

最好的起点是“来自相机的纹理”活动。特别注意“缩放”功能,它调整纹理坐标以选择图像的内部部分。您可以修改ScaledDrawable2d#getTexCoordArray() 以映射框架的内部,并修改渲染代码以使用方形四边形。将其输入视频编码器。

【讨论】:

我试图找出新的方法来进行方形视频录制。然而,似乎很难获得一个好的和干净的工作解决方案。每种方法都有其缺点和限制。即使使用 OpenCv,似乎也很难得到令人满意的东西。主要问题是:足够的FPS,压缩的分辨率。您知道创建带有方形格式预览的视频的好方法吗?谢谢

以上是关于Grafika 和 OpenGL 在 android 上以方形录制视频的主要内容,如果未能解决你的问题,请参考以下文章

php通过Grafika实现九宫格组图

Grafika TextureMovieEncoder

PHP图片处理库Grafika详细教程

Android openGl开发详解-相机预览

初学Android OpenGL ES之使用纹理 八十三

OpenGL ES 在不使用 glPixelStorei 的情况下更新纹理的子部分