iOS IJKPlayer 編譯之路

前言:

1.那一天,我終于體會到了被直播項目所支配的恐懼和被框架折磨的那份掙扎。
2.我再也不會編譯IJKPlayer了蛤签。

最終效果:

gif動圖超過5M就不能上傳,我這里減少了gif幀數(shù)栅哀。
附加功能: 發(fā)送彈幕 震肮、適配導航欄 称龙、 屏幕錄制

放我出去

IJKFrameWork: 鏈接: https://pan.baidu.com/s/1uhzH_90Rr-d5Nt4DTpfk6A
提取碼: 42ji

第 1 步 環(huán)境要求

編譯環(huán)境:

Mac系統(tǒng)版本:macOS Mojave 10.14.2 (18C54)
Xcode 1 版本: Xcode 9.1
Xcode 2 版本: Xcode 10.1

\color{red}{注意:}
1、這里選用Xcode的版本是9.1, 這個很重要戳晌,用這個版本的Xcode編譯出來的IJKFrameWork 就會很開心
2鲫尊、聽說最新的Xocode已經(jīng)弱化了對armv7的支持,在編譯ijk的時候沦偎,命令行就會給你報一個armv7的錯疫向,你就玩不下去了。拜訪了很多玩家之后豪嚎,終于去下載了Xcode9.1搔驼,又可以開心編譯了。在之后使用的IJKFrameWork 可以同時支持真機和模擬器侈询,并且在打包的時候也不會報錯舌涨。在這里尋找 Xcode9.1: https://developer.apple.com/download/more/
3、我再也不想看到任何關(guān)于armv7的報錯了扔字。

第 2 步 準備工作

  1. 安裝 Homebrew(不確定是否需要)
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 安裝 yasm(不確定是否需要)
brew install yasm
  1. 安裝 pkg-config(不確定是否需要)
brew install pkg-config

4 使用git把IJKPlayer項目克隆到本地
https://github.com/Bilibili/ijkplayer
git我還是喜歡用 source tree囊嘉,這里就沒有命令行操作了。

第 3 步 更改配置革为,初始化

1.這是我把項目克隆下來的文件目錄

項目結(jié)構(gòu).png

2.更改配置扭粱,這里我喜歡最高的編解碼支持。

module-default.sh 更多的編解碼器/格式
module-lite-hevc.sh 較少的編解碼器/格式(包括hevc)
module-lite.sh 較少的編解碼器/格式(默認情況)

操作1:進入到config目錄震檩,如下圖焊刹,打開命令行,cd 然后直接把config目錄拖進去恳蹲,按回車虐块,就進入了。

cd 你的config目錄路徑

操作2:刪除當前的 module.sh 文件

rm module.sh

操作3:更改配置
創(chuàng)建軟鏈接 module.sh 指向 module-default.sh 我需要最多的支持嘉蕾。不喜歡更多的支持可以選擇其他兩個配置贺奠。

ln -s module-default.sh module.sh

綜合操作示意圖:


設(shè)置編解碼.png

第 4 步 下載ffmpeg

1.進入ijk項目主目錄(也就是腳本 init-ios.sh所在的目錄),還是直接把文件夾拖入到命令行按回車確定错忱。

cd 你的ijk項目目錄路徑

2.執(zhí)行腳本下載ffmpeg

./init-ios.sh

綜合操作示意圖

下載ffmpeg.png

第 5 步 添加 HTTPS 支持

1.切換到ijk項目主目錄儡率,還是 cd 在命令行里里拖入文件夾

cd 你的ijk項目目錄路徑

2.執(zhí)行腳本

./init-ios-openssl.sh

操作示意圖


獲取https.png

第 6 步 啟用 HTTPS 支持

1.進入 ios 目錄

cd 項目中的ios目錄

2.添加啟用的語句

echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh

操作示意圖


啟用openssl.png

第 7 步 編譯支持 HTTPS 和 ffmpeg

\color{red}{注意!!!:} 為了防止世界杯破壞,為了保護世界的和平以清。為了在接下來的過程中沒有意外劇情儿普,請先使用下面這句話。
這里要使用Xcode9.1 來編譯 ffmpeg掷倔,因為我裝了兩個眉孩,一個Xcode9.1, 一個Xcode10.1,需要先把Xcode10.1刪掉浪汪,只留下一個巴柿,然后把剩下的Xcode9.1 直接改名為 "Xcode" 不要加什么9.1, X 得大寫。要保證名字和下面的命令中出現(xiàn)的Xcode一致死遭。然后在命令行使用下面這條命令:

sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer

然后會提示你輸入電腦密碼广恢,輸入按確定。

操作1:進入 ios 文件夾

cd 你項目的ios目錄

操作2:執(zhí)行腳本 compile-openssl.sh

./compile-openssl.sh all

操作3:執(zhí)行腳本 compile-ffmpeg.sh

./compile-ffmpeg.sh all 

\color{red}{注意:} 上面兩個命令最搞事呀潭,容易報各種錯誤钉迷。如果在編譯過程中出現(xiàn)了任何錯誤,重新編譯有可能也還是會失敗钠署,編譯報錯之后先清理一下之前編譯的文件篷牌,使用對應的下面的兩個命令。反復實踐仍舊報錯踏幻,請檢查使用Xcode的版本,和設(shè)置Xcode路徑的命令是否正確執(zhí)行戳杀。

./compile-openssl.sh clean
./compile-ffmpeg.sh clean

編譯 compile-openssl.sh 后會生成 libcrypto.a 和 libssl.a


結(jié)果.png

第 8 步 打開項目尋找IJKFrameWork

1.進入如下目錄该面,打開 IJKMediaPlayer 工程

打開.png
  1. 切換Schema 為 IJKMediaFramework
切換.png
  1. 更改配置 把如圖所示的 Build Configuration 改成 Release,因為我認為這個 framework 需要投入正式生產(chǎn)
更改配置.png

4.添加編譯 openssl 生成的庫 點擊”+“之后信卡,在彈出的框里選擇左下角的 ”Add Other“隔缀, 進入到文件選擇頁面, 在路徑 ~/Bilibili/ios/build/universal/lib 下面找到 libcrypto.a 和 libssl.a

添加第一步.png
添加第二步.png

5.分別編譯真機和模擬器

編譯真機.png
編譯模擬器.png

第 9 步 合并輸出

1.在如圖所示位置右鍵傍菇,show in finder 打開FrameWork位置猾瘸。沒有編譯之前,那個小東西是紅色的丢习。編譯成功之后牵触,那個小東西就會徹底黑化。

找到包.png

2.進入到Products文件夾下面 cd 之后在命令行里面拖入文件夾咐低,按回車揽思,然后執(zhí)行合并命令:

lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework

合并結(jié)果:


合并.png

3.將生成出來的文件拖入到其中一個進行替換

替換.png

4.得到最終版本

結(jié)果.png

第 10 步 你們以為這就完了嗎?并沒有见擦。 測試開始钉汗。

1.新建一個項目,取名為 ”ChickenMaster“鲤屡, 然后把制作出來的SDK導入進來损痰。


引入項目.png

2.寫一些代碼,讓他播放酒来。

#import "ViewController.h"
#import <IJKMediaFramework/IJKMediaFramework.h>

@interface ViewController ()

@property (nonatomic, strong) IJKFFMoviePlayerController *player;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *x = @"http://隨便來個什么能測試的地址就行.m3u8";
    NSURL *url = [NSURL URLWithString:x];
    [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_SILENT];
    IJKFFOptions *o = [IJKFFOptions optionsByDefault];
    _player = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:o];
    _player.view.frame = self.view.bounds;
    _player.view.backgroundColor = [UIColor blackColor];
    _player.scalingMode = IJKMPMovieScalingModeAspectFill;
    [self.view addSubview:_player.view];
    [_player prepareToPlay];
    [_player play];
}
@end

很無聊卢未,編譯報錯了,誰讀懂了這些報錯請賜我一死堰汉。

測試代碼.png
報錯內(nèi)容.png

3.引入系統(tǒng)庫
有沒有發(fā)現(xiàn)下面這張圖是黑色的尝丐,上面都是白色的显拜。
\color{red}{警告!:}
到這一步位置爹袁,我們一直使用的都是Xcode9.1,這個工程用Xcode9.1打開之后远荠,就算添加了下圖的系統(tǒng)庫,也仍舊是報錯失息,我解不了譬淳。
這個時候,放在垃圾桶里的Xcode10.1該解除封印了盹兢。我們召喚Xcode10.1,并使用Xcode10.1打開這個工程邻梆,添加如下三個系統(tǒng)庫。
但是在添加 libstdc++ 庫的時候绎秒,你會發(fā)現(xiàn)系統(tǒng)沒有浦妄。沒有! 解決辦法:Xcode10刪除libstdc++庫編譯報錯

添加庫.png
  1. Command + B 在這三個條件下都是編譯成功的见芹。
1.png
2.png
3.png
  1. Command + R ! R剂娄!R!
示意圖.jpeg

后記

終于是寫完了玄呛。

座中泣下誰最多阅懦?江州司馬青衫濕。

誠摯感謝以下玩家的指引:
iOS直播之ijkplayer的集成與簡單使用(播放)
讓 ijkplayer 支持兼容armv7 armv7s
Xcode10刪除libstdc++庫編譯報錯

ijkplayer ios項目集成(圖文詳細版)

iOS開發(fā)ijkplayer拉流框架的集成

iOS中集成ijkplayer視頻直播框架 (error: setupDisplay not ready)

IOS開源播放器ijkplayer從編譯到播放(上)

ijkplayer靜態(tài)庫錯誤:Undefined symbols for architecture x86_64:

iOS在項目中對ijkplayer集成ffmpeg遇到的問題

帶你走進腳本世界徘铝,ijkplayer之【init-ios.sh】腳本分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耳胎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惕它,更是在濱河造成了極大的恐慌怕午,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淹魄,死亡現(xiàn)場離奇詭異诗轻,居然都是意外死亡,警方通過查閱死者的電腦和手機揭北,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門扳炬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搔体,你說我怎么就攤上這事恨樟。” “怎么了疚俱?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵劝术,是天一觀的道長。 經(jīng)常有香客問我,道長养晋,這世上最難降的妖魔是什么衬吆? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮绳泉,結(jié)果婚禮上逊抡,老公的妹妹穿的比我還像新娘。我一直安慰自己零酪,他們只是感情好冒嫡,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著四苇,像睡著了一般孝凌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上月腋,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天蟀架,我揣著相機與錄音,去河邊找鬼榆骚。 笑死片拍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的寨躁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼牙勘,長吁一口氣:“原來是場噩夢啊……” “哼职恳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起方面,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤放钦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恭金,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體操禀,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年横腿,在試婚紗的時候發(fā)現(xiàn)自己被綠了颓屑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耿焊,死狀恐怖揪惦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罗侯,我是刑警寧澤器腋,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響纫塌,放射性物質(zhì)發(fā)生泄漏诊县。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一措左、第九天 我趴在偏房一處隱蔽的房頂上張望依痊。 院中可真熱鬧,春花似錦媳荒、人聲如沸抗悍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缴渊。三九已至,卻和暖如春鱼炒,著一層夾襖步出監(jiān)牢的瞬間衔沼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工昔瞧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留指蚁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓自晰,卻偏偏與公主長得像凝化,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酬荞,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345