我开始为应用程序解码/编码视频,似乎BigFlake's site是工作视频代码的权威参考。我已将ExtractMpegFramesTest_egl14.java复制到我的项目中并将其修改为使用不同的文件路径,但没有别的。它从我复制到设备中的预先录制的视频中正确提取帧。但是,当尝试将其与从设备相机录制的视频一起使用时,我得到的帧只是水平线:
在测试不同的录制视频后,我意识到问题来自旋转视频。设备的摄像头在帧缓冲器中对帧进行编码,然后在视频上拍打旋转标签。这可以从MediaFormat
对象中提取:
int rotation = format.getInteger("rotation-degrees");
不幸的是,交换保存图像的宽度/高度并没有改变任何东西,图像仍然会被破坏。如何正确处理旋转帧的保存代码?
答案 0 :(得分:3)
正如source code comment pointed out by another answer暗示的那样,OpenGL需要转换图像。原始invert
布尔值有助于未旋转或旋转180度的源。但其他方向(90和270)将显示翻转图像,因此它们也必须翻转。
以下是我为正确处理旋转所做的更改:
rotation-degrees
属性(如果可用)。CodecOutputSurface
构造函数以接受数字旋转参数,该参数存储在mRotation
实例变量中。invert
代码。您可以从the following gist获取完整修改后的版本,并查看上面提到的individual changes。