前言:
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
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 步 準備工作
- 安裝 Homebrew(不確定是否需要)
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安裝 yasm(不確定是否需要)
brew install yasm
- 安裝 pkg-config(不確定是否需要)
brew install pkg-config
4 使用git把IJKPlayer項目克隆到本地
https://github.com/Bilibili/ijkplayer
git我還是喜歡用 source tree囊嘉,這里就沒有命令行操作了。
第 3 步 更改配置革为,初始化
1.這是我把項目克隆下來的文件目錄
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
綜合操作示意圖:
第 4 步 下載ffmpeg
1.進入ijk項目主目錄(也就是腳本 init-ios.sh所在的目錄),還是直接把文件夾拖入到命令行按回車確定错忱。
cd 你的ijk項目目錄路徑
2.執(zhí)行腳本下載ffmpeg
./init-ios.sh
綜合操作示意圖
第 5 步 添加 HTTPS 支持
1.切換到ijk項目主目錄儡率,還是 cd 在命令行里里拖入文件夾
cd 你的ijk項目目錄路徑
2.執(zhí)行腳本
./init-ios-openssl.sh
操作示意圖
第 6 步 啟用 HTTPS 支持
1.進入 ios 目錄
cd 項目中的ios目錄
2.添加啟用的語句
echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh
操作示意圖
第 7 步 編譯支持 HTTPS 和 ffmpeg
為了防止世界杯破壞,為了保護世界的和平以清。為了在接下來的過程中沒有意外劇情儿普,請先使用下面這句話。
這里要使用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
上面兩個命令最搞事呀潭,容易報各種錯誤钉迷。如果在編譯過程中出現(xiàn)了任何錯誤,重新編譯有可能也還是會失敗钠署,編譯報錯之后先清理一下之前編譯的文件篷牌,使用對應的下面的兩個命令。反復實踐仍舊報錯踏幻,請檢查使用Xcode的版本,和設(shè)置Xcode路徑的命令是否正確執(zhí)行戳杀。
./compile-openssl.sh clean
./compile-ffmpeg.sh clean
編譯 compile-openssl.sh 后會生成 libcrypto.a 和 libssl.a
第 8 步 打開項目尋找IJKFrameWork
1.進入如下目錄该面,打開 IJKMediaPlayer 工程
- 切換Schema 為 IJKMediaFramework
- 更改配置 把如圖所示的 Build Configuration 改成 Release,因為我認為這個 framework 需要投入正式生產(chǎn)
4.添加編譯 openssl 生成的庫 點擊”+“之后信卡,在彈出的框里選擇左下角的 ”Add Other“隔缀, 進入到文件選擇頁面, 在路徑 ~/Bilibili/ios/build/universal/lib 下面找到 libcrypto.a 和 libssl.a
5.分別編譯真機和模擬器
第 9 步 合并輸出
1.在如圖所示位置右鍵傍菇,show in finder 打開FrameWork位置猾瘸。沒有編譯之前,那個小東西是紅色的丢习。編譯成功之后牵触,那個小東西就會徹底黑化。
2.進入到Products文件夾下面 cd 之后在命令行里面拖入文件夾咐低,按回車揽思,然后執(zhí)行合并命令:
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
合并結(jié)果:
3.將生成出來的文件拖入到其中一個進行替換
4.得到最終版本
第 10 步 你們以為這就完了嗎?并沒有见擦。 測試開始钉汗。
1.新建一個項目,取名為 ”ChickenMaster“鲤屡, 然后把制作出來的SDK導入進來损痰。
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
很無聊卢未,編譯報錯了,誰讀懂了這些報錯請賜我一死堰汉。
3.引入系統(tǒng)庫
有沒有發(fā)現(xiàn)下面這張圖是黑色的尝丐,上面都是白色的显拜。
到這一步位置爹袁,我們一直使用的都是Xcode9.1,這個工程用Xcode9.1打開之后远荠,就算添加了下圖的系統(tǒng)庫,也仍舊是報錯失息,我解不了譬淳。
這個時候,放在垃圾桶里的Xcode10.1該解除封印了盹兢。我們召喚Xcode10.1,并使用Xcode10.1打開這個工程邻梆,添加如下三個系統(tǒng)庫。
但是在添加 libstdc++ 庫的時候绎秒,你會發(fā)現(xiàn)系統(tǒng)沒有浦妄。沒有! 解決辦法:Xcode10刪除libstdc++庫編譯報錯
- Command + B 在這三個條件下都是編譯成功的见芹。
- Command + R ! R剂娄!R!
后記
終于是寫完了玄呛。
座中泣下誰最多阅懦?江州司馬青衫濕。
誠摯感謝以下玩家的指引:
iOS直播之ijkplayer的集成與簡單使用(播放)
讓 ijkplayer 支持兼容armv7 armv7s
Xcode10刪除libstdc++庫編譯報錯
iOS中集成ijkplayer視頻直播框架 (error: setupDisplay not ready)
ijkplayer靜態(tài)庫錯誤:Undefined symbols for architecture x86_64: