Camera2比起Camera的自定义程度更高一点,比如可以同时输出多个视频流分别用于显示预览画面和录制视频。但是!不同于Camera可以直接使用setOrientation方法直接设置视频旋转角度,Camera2没有提供类似的方法。此外,由于MediaRecorder类的一些问题,我使用了自定义的类来对输出的视频流进行处理,也没法使用MediaRecorder类的设置旋转角度方法。
这样的结果就是,使用前置摄像头录制的视频,默认视角是旋转了90°的,不符合正常观看的要求。
为了解决这个问题,我查了不少资料,对Camera2自身设置属性和对自定义的视频录制类的修改都没有正确的旋转视频的角度。在失败了很多次之后我选择了从MP4本身的文件格式入手。
这个方法的原理是模仿Camera中的setOrientation。这个方法并没有真正旋转视频的内容,只是在MP4视频的内容中对应旋转的标志位加入了旋转的记号,这样,在播放器进行播放时,读取到对应的内容就知道应该如何旋转视频的角度。我想模仿这个方法,通过解析MP4文件的二进制内容,找到标记旋转角度的位置并进行修改,实现视频录制文件的旋转。
我参考了这两个网站
Online Mp4 Parser : https://www.onlinemp4parser.com/
MP4文件格式解析 : https://www.cnblogs.com/ranson7zop/p/7889272.html