在 android 上旋转 Mp4 而不使用元数据旋转标签

Rotating an Mp4 on android without using the metadata rotation tag

我遇到了一个问题,过去几天我一直在努力解决 Android 上的 MP4 文件轮换问题。我目前正在开发一个应用程序,它将 MP4 文件作为字节流从 android 设备发送到另一台设备上播放。

我遇到的问题是 android 设备上以纵向模式录制的视频在接收流的播放器上显示时旋转了 90 度。

我尝试使用 MP4Parser 从原始文件创建新的 MP4,并更改旋转。我还尝试通过创建一个新的 MP4 更改媒体格式中的 key-rotation 来更改旋转,并且还尝试在创建时更改 orientation hint一个新的 Muxer。

所有这些方法都有效,但似乎只是更改了旋转元数据。在某些播放器中,正在读取此元数据并应用轮换。但是,用于我们应用程序的目标播放器中使用的播放器无法读取此元数据。

我唯一的解决办法是创建一个临时的 MP4,它已经旋转了视频数据,然后将其发送过来。我找到了在 MP4 中旋转单个 YUV image frames 的资源,但我的问题是如何从输入的 MP4 中检索这些帧并将修改后的帧写入新文件?


注意:我正在使用 Xamarin 构建应用程序,我尝试使用 FFMPEG 但添加二进制文件将使项目太大了,我也担心许可问题。

我们最终使用 FFMPEG 实现将文件发送到其他地方进行转换。