在 MP4 中嵌入有关旋转的信息
你真的在改变视频轨道的方向吗?如果您更改音轨的方向,您将看不到任何变化。
根据我的经验,更改整个文件的方向更容易(1.0.4.2 API 版本):
Movie result = MovieCreator.build("input.mp4");
// do something with the file
Container out = new DefaultMp4Builder().build(result);
MovieHeaderBox mvhd = Path.getPath(out, "moov/mvhd");
mvhd.setMatrix(Matrix.ROTATE_180);
out.writeContainer(new FileOutputStream("result.mp4").getChannel());
或者,如果您想直接更改方向而不通过Movie
对象:
IsoFile isoFile = new IsoFile("video.mp4");
MovieHeaderBox mvhd = Path.getPath(isoFile, "/moov/mvhd");
mvhd.setMatrix(Matrix.ROTATE_180);
isoFile.writeContainer(new FileOutputStream("result.mp4").getChannel());
该文件result.mp4
现在旋转了 180 度,您可以通过在 QuickTime 或 VLC 等桌面播放器中播放文件来验证。
Android上的典型问题
当您借助 VideoView 在 Android 上播放视频时,您可能会注意到未考虑矩阵。我不完全确定这是否是故意的,但解决方法是使用TextureView
应用转换的 a 。
为此,您必须
- 从 /moov/mvhd 的 MovieHeaderBox 和 /moov/trak[0, 1, 2, 3]/tkhd 的 MediaHeaderBox 提取矩阵(取决于哪个 trak 包含视频)。
- 通过矩阵乘法合并两个矩阵。
- 根据上一步生成的矩阵调用、
setScaleX
、setScaleY
和setPivotX
。setPivotY
setRotation