由于公司應(yīng)用的播放器kxmovie已經(jīng)很久沒有更新敬飒,近期,領(lǐng)導(dǎo)讓我對應(yīng)用內(nèi)的播放器使用較新的播放器進(jìn)行替換路操,我考慮了一下符糊,最后決定用在直播中使用量比較多的ijkplayer播放器谊却。此處,我記錄下我完成此需求的步驟和遇到的各種坑:
首先,在github上找到這個(gè)庫ijkplayer刨啸,其實(shí)已經(jīng)有很詳細(xì)的使用方法缀去。后來在簡書中找到了這篇文章iOS中集成ijkplayer視頻直播框架侣灶,對整個(gè)ijkplayer的編譯和打包靜態(tài)庫做了很詳細(xì)的介紹,按照這個(gè)步驟搞很快就做完了缕碎。我自以為沒啥難度褥影,但是當(dāng)我將打包好的靜態(tài)庫及相關(guān)系統(tǒng)庫添加完后,運(yùn)行時(shí)居然崩潰了咏雌,搞得我一臉懵逼凡怎,最后在工程內(nèi)又找到了一個(gè)ffmpeg的靜態(tài)庫,此時(shí)我突然想起來赊抖,肯定是ijkplayer內(nèi)的ffmpeg靜態(tài)庫與工程內(nèi)已存在的ffmpeg靜態(tài)庫沖突栅贴,導(dǎo)致的崩潰。隨后熏迹,我按照下面地址的這篇文章iOS 項(xiàng)目中包含多個(gè) FFMPEG 方法沖突的通用解決辦法。的方法凝赛,將工程內(nèi)的ffmpeg替換為與ijkplayer庫內(nèi)同一個(gè)版本的庫注暗。
然后,在ffmpeg官網(wǎng)墓猎,通過比對相應(yīng)頭文件的版本捆昏,確定工程內(nèi)使用的是2.7.7版本的ffmpeg,而ijkplayer則使用3.4.4版本毙沾。所以我決定將工程內(nèi)以前存在的就版本進(jìn)行升級骗卜。我參考iOS項(xiàng)目中編譯和集成FFmpeg這篇文章,沒多久就生成了一份新3.4.4版本的ffmpeg靜態(tài)庫左胞,此過程中需要對sh文件進(jìn)行編輯寇仓,修改一下要編譯的ffmpeg版本。
當(dāng)我把編譯后的靜態(tài)庫替換掉之前工程內(nèi)的庫后烤宙,居然無法編譯遍烦,報(bào)了一堆錯(cuò)。根據(jù)報(bào)錯(cuò)信息躺枕,發(fā)現(xiàn)升級Xcode9之后服猪,工程中FFmpeg中的avutil.h下的AVMediaType與系統(tǒng)的AVFoundation框架沖突了。按照Xcode9 FFmpeg沖突問題這篇文章拐云,將3.4.4源碼內(nèi)涉及到的枚舉全部進(jìn)行替換罢猪,并重新編譯3.4.4的ffmpeg靜態(tài)庫。隨后用新的靜態(tài)庫叉瘩,公司的應(yīng)用工程內(nèi)之前我們自己實(shí)現(xiàn)的編解碼部分用到了ffmpeg的部分內(nèi)容膳帕,更換新版的庫后,一些枚舉名稱發(fā)生了改變房揭,之前調(diào)用的某些函數(shù)已經(jīng)被遺棄了备闲,經(jīng)過一段時(shí)間的修改晌端,終于解決了所有問題,終于可以正常運(yùn)行恬砂。
正當(dāng)我以為萬事大吉的時(shí)候咧纠,居然發(fā)現(xiàn)以前應(yīng)用內(nèi)涉及到投屏的部分功能用不了了,看了下以前的代碼泻骤,才發(fā)現(xiàn)之前這個(gè)工程要用到H264的編解碼這塊內(nèi)容漆羔,我猜測應(yīng)該是需要將libx264編譯到FFmpeg才行。隨后參考iOS FFmpeg+libx264包的產(chǎn)生這篇文章狱掂,先下載并編譯x264靜態(tài)庫演痒,然后再將x264編譯到ffmpeg,同時(shí)將兩個(gè)庫都導(dǎo)入我們應(yīng)用趋惨,最后運(yùn)行并驗(yàn)證鸟顺,所有功能都正常了。本以為集成ijkplayer視頻播放框架很簡單器虾,結(jié)果居然引起了這么多的坑讯嫂,一步步解決完,內(nèi)心的大石頭終于可以落地了兆沙。