最近在处理视频和音频,要保证安卓和苹果端互相兼容,之前这方面接触的并不是很多,现在处理起来也是整天查东查西不停地爬坑。昨天遇到的是苹果的播放器播放不了它本应该支持的格式。
这个问题也包括其它的格式,比如3gp、avi等。我在使用AVPlayer播放安卓端上传的MP4文件时无法打开,只能读取到文件信息(比如时长)。
这个问题就要考虑到视频生成时的编码格式了。我们知道一个视频可以看做是画面和音频和合成,画面的生成对应着编码格式,同样音频的也对应着它的编码格式。就拿MP4这个格式来说,安卓端在生成mp4文件时的配置如下:
可以看到在画面上他可能用到H264或者MPEG4,在音频上他可能用到如图所示的那么多种类,这就导致了虽然最后生成的文件是MP4格式,但实际上只是很多种MP4格式的其中之一,。苹果的视频播放器虽然写着支持MP4,但很可能它只是支持某一种编码的视频格式,并不是所有的都支持,所以播放不出来。
最后解决的方式是:安卓端在处理音频编码时选择AAC格式(之前是AMR,苹果的播放器并不能播放AMR,导致整个视频无法播放)。
但是数据库里面还是存留着之前AMR编码格式的音频。。。所以我就开始看ffmpeg。。。这个对小白来说真的很头大,不过还好现在已经可以进行格式转化了,同时也处理了一些BUG,等有空了记录下。但我觉得在手机端进行格式转化真的非常不好,我在测试的时候发现手机运行内存明显升高,手机发热,转化效率超级低(10秒的3gp转mov大概需要10秒)。。。所以尽量从源头设置好编码格式让两端都能支持。