由于公司應用的播放器kxmovie已經(jīng)很久沒有更新,近期,領(lǐng)導讓我對應用內(nèi)的播放器使用較新的播放器進行替換,我考慮了一下,最后決定用在直播中使用量比較多的ijkplayer播放器。此處,我記錄下我完成此需求的步驟和遇到的各種坑:
首先,在github上找到這個庫ijkplayer,其實已經(jīng)有很詳細的使用方法。后來在簡書中找到了這篇文章iOS中集成ijkplayer視頻直播框架,對整個ijkplayer的編譯和打包靜態(tài)庫做了很詳細的介紹,按照這個步驟搞很快就做完了。我自以為沒啥難度,但是當我將打包好的靜態(tài)庫及相關(guān)系統(tǒng)庫添加完后,運行時居然崩潰了,搞得我一臉懵逼,最后在工程內(nèi)又找到了一個ffmpeg的靜態(tài)庫,此時我突然想起來,肯定是ijkplayer內(nèi)的ffmpeg靜態(tài)庫與工程內(nèi)已存在的ffmpeg靜態(tài)庫沖突,導致的崩潰。隨后,我按照下面地址的這篇文章iOS 項目中包含多個 FFMPEG 方法沖突的通用解決辦法。的方法,將工程內(nèi)的ffmpeg替換為與ijkplayer庫內(nèi)同一個版本的庫。
然后,在ffmpeg官網(wǎng),通過比對相應頭文件的版本,確定工程內(nèi)使用的是2.7.7版本的ffmpeg,而ijkplayer則使用3.4.4版本。所以我決定將工程內(nèi)以前存在的就版本進行升級。我參考iOS項目中編譯和集成FFmpeg這篇文章,沒多久就生成了一份新3.4.4版本的ffmpeg靜態(tài)庫,此過程中需要對sh文件進行編輯,修改一下要編譯的ffmpeg版本。
當我把編譯后的靜態(tài)庫替換掉之前工程內(nèi)的庫后,居然無法編譯,報了一堆錯。根據(jù)報錯信息,發(fā)現(xiàn)升級Xcode9之后,工程中FFmpeg中的avutil.h下的AVMediaType與系統(tǒng)的AVFoundation框架沖突了。按照Xcode9 FFmpeg沖突問題這篇文章,將3.4.4源碼內(nèi)涉及到的枚舉全部進行替換,并重新編譯3.4.4的ffmpeg靜態(tài)庫。隨后用新的靜態(tài)庫,公司的應用工程內(nèi)之前我們自己實現(xiàn)的編解碼部分用到了ffmpeg的部分內(nèi)容,更換新版的庫后,一些枚舉名稱發(fā)生了改變,之前調(diào)用的某些函數(shù)已經(jīng)被遺棄了,經(jīng)過一段時間的修改,終于解決了所有問題,終于可以正常運行。
正當我以為萬事大吉的時候,居然發(fā)現(xiàn)以前應用內(nèi)涉及到投屏的部分功能用不了了,看了下以前的代碼,才發(fā)現(xiàn)之前這個工程要用到H264的編解碼這塊內(nèi)容,我猜測應該是需要將libx264編譯到FFmpeg才行。隨后參考iOS FFmpeg+libx264包的產(chǎn)生這篇文章,先下載并編譯x264靜態(tài)庫,然后再將x264編譯到ffmpeg,同時將兩個庫都導入我們應用,最后運行并驗證,所有功能都正常了。本以為集成ijkplayer視頻播放框架很簡單,結(jié)果居然引起了這么多的坑,一步步解決完,內(nèi)心的大石頭終于可以落地了。