Android 旋转使用 MediaCodec 创建的表面

Android Rotate Surface created using MediaCodec

我正在使用 Camera2 API 从相机捕捉视频。我知道我们需要旋转预览,因为 Camera2 没有等效的 setDisplayOrientation()。能够使用矩阵旋转预览。

我也在使用 MediaCodec API 对视频进行编码。但是,当我将 phone 旋转 180 度时,编码视频会反转。我不知道如何旋转编码视频。

我在配置时尝试 KEY_ROTATION 在 MediaFormat 中。但我想这只是在解码时(输出表面)。

谢谢!!

Camera2 在这里并不直接重要 - 如果你想使用 camera2,你可以使用 MediaRecorder,通过 MediaRecorder.getSurface() and the MediaRecoder.setOrientationHint() 方法设置所需的方向。

如果您使用的是 MediaCodec 而不是 MediaRecorder,则那里没有方向标志;相应的方法是 MediaMuxer.setOrientationHint,因为 MediaRecoder 所做的只是将请求的方向写入视频文件元数据;实际帧通常不会被编码器旋转。

如果您没有将编码缓冲区包装到视频文件中,而是以其他方式使用它们(用于视频聊天的网络传输等),您需要将方向与编码帧一起传递并应用自己在接收端进行转换。