最近在處理視頻和音頻,要保證安卓和蘋果端互相兼容,之前這方面接觸的并不是很多,現在處理起來也是整天查東查西不停地爬坑。昨天遇到的是蘋果的播放器播放不了它本應該支持的格式。
這個問題也包括其它的格式,比如3gp、avi等。我在使用AVPlayer播放安卓端上傳的MP4文件時無法打開,只能讀取到文件信息(比如時長)。
這個問題就要考慮到視頻生成時的編碼格式了。我們知道一個視頻可以看做是畫面和音頻和合成,畫面的生成對應著編碼格式,同樣音頻的也對應著它的編碼格式。就拿MP4這個格式來說,安卓端在生成mp4文件時的配置如下:
92715D2EB0A3AD2835C65F668B934BAC.png
CF8FA8006D04F0EE7CD1896BD9CA3DBA.png
可以看到在畫面上他可能用到H264或者MPEG4,在音頻上他可能用到如圖所示的那么多種類,這就導致了雖然最后生成的文件是MP4格式,但實際上只是很多種MP4格式的其中之一,。蘋果的視頻播放器雖然寫著支持MP4,但很可能它只是支持某一種編碼的視頻格式,并不是所有的都支持,所以播放不出來。
最后解決的方式是:安卓端在處理音頻編碼時選擇AAC格式(之前是AMR,蘋果的播放器并不能播放AMR,導致整個視頻無法播放)。
但是數據庫里面還是存留著之前AMR編碼格式的音頻。。。所以我就開始看ffmpeg。。。這個對小白來說真的很頭大,不過還好現在已經可以進行格式轉化了,同時也處理了一些BUG,等有空了記錄下。但我覺得在手機端進行格式轉化真的非常不好,我在測試的時候發現手機運行內存明顯升高,手機發熱,轉化效率超級低(10秒的3gp轉mov大概需要10秒)。。。所以盡量從源頭設置好編碼格式讓兩端都能支持。