ijkplayer?是?bilibili?開源的一款優(yōu)秀的播放器, 基于 FFmpeg, 支持 iOS/Android, 點播/直播, 以及多種編碼.官方并不直接提供 framework 框架包, 這樣大家可以根據(jù)需要選擇配置, 自己編譯并打包.但這樣也會讓很多伙伴們編譯懵逼,我就是其中一位。下面是我如何在 iOS 中集成ijkplayer的,僅供各位大佬參考:
一、 下載ijkplayer:
在任意一個地方新建一個文件夾, 假設(shè)為桌面, 文件夾名為ijkplayer:
# 進入到剛剛新建的文件夾內(nèi)
cd ~/Desktop/ijkplayer/
# 獲取ijkplayer源碼
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
# 進入源碼目錄
cd ijkplayer-ios
# 新建一個latest分支并切換分支 (目前為k0.8.8, 可以自行去GitHub查看最新版本號)
git checkout -B latest k0.8.8
二、 配置編解碼器格式支持:
一般默認為最少支持, 如果足夠你使用, 可以跳過這一步. 否則可以改為以下配置:
. module-default.sh?更多的編解碼器/格式
. module-lite-hevc.sh?較少的編解碼器/格式(包括hevc)
. module-lite.sh?較少的編解碼器/格式(默認情況)
# 進入 config 目錄
cd config
# 刪除當(dāng)前的 module.sh 文件
rm module.sh
# 可根據(jù)需要替換為`module-default.sh`, `module-lite-hevc.sh`, `module-lite.sh`
# 創(chuàng)建軟鏈接 module.sh 指向 module-lite-hevc.sh
ln -s module-lite-hevc.sh module.sh
cd ..
cd ios
sh compile-ffmpeg.sh clean
三、獲取 ffmpeg 并初始化 (這一步要是網(wǎng)絡(luò)太差會非常的慢,我有兩次編譯了3個小時)
cd ..
./init-ios.sh
四、添加 https 支持?
最后會生成支持 https 的靜態(tài)文件?libcrypto.a?和?libssl.a, 如果不需要可以跳過這一步
# 獲取 openssl 并初始化
./init-ios-openssl.sh
cd ios
# 在模塊文件中添加一行配置 以啟用 openssl 組件
echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh
./compile-ffmpeg.sh clean
編譯:
# 如果下一步提示錯誤`xcrun: error: SDK "iphoneos" cannot be located`, 請執(zhí)行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再重新執(zhí)行下一步
# 編譯openssl, 如果不需要https可以跳過這一步
./compile-openssl.sh all
# 編譯ffmpeg
./compile-ffmpeg.sh all
ps: 如果提示錯誤:
添加 openssl 相關(guān)包以支持 https (如果不使用 https, 可以跳過此步, 直接開始打包 framwork)
如果使用 https, 那么需要手動給 IJKMediaFramework 添加libcrypto.a和libssl.a文件, 默認不會添加
ps: 這兩個依賴庫的目錄為: ijkplayer-ios/ios/build/universal/lib, 只有進行了上面跟 openssl 相關(guān)的操作, 才會在這個目錄下有生成libcrypto.a和libssl.a
五、打開 IJKMediaPlayer 項目 (執(zhí)行完上面的每一步后確認無誤)
open IJKMediaPlayer/IJKMediaPlayer.xcodeproj
六、打包 framwork
1、配置 Release 模式:
2、打包真機 framework
選擇你連接的手機或者?Generic iOS Device,然后按鍵?command+b?編譯即可
如果之前的步驟刪除了?compile-ffmpeg.sh?中?armv7, 這里會報錯, 我們直接注釋掉就好,如果注釋后還是報這個錯就全局搜索你的電腦 找到對應(yīng)的文件 打開看里面的?armv7是否注釋,config文件同理。
3、打包模擬器 framework,隨便選擇一個模擬器 直接編譯
4、合并 framework:如果只需要真機運行或者模擬器運行, 可以不用合并, 直接找到對應(yīng)的 framework 導(dǎo)入項目即可; 一般我們?yōu)榱朔奖銜喜?framework, 這樣就同時支持模擬器和真機運行.
先找到生成 framework 的目錄:
打開終端, 先?cd?到?Products?目錄下
然后執(zhí)行:?lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
合并完成:
可以看到這里生成了一個大概兩倍大小的文件, 將生成的IJKMediaFramework文件替換掉真機framework中的IJKMediaFramework文件,然后這個替換掉文件的真機framework就是我們需要的通用的framework了。
七、集成 framework 到項目中
導(dǎo)入 framework
直接將IJKMediaFramework.framework拖入到工程中即可
注意記得勾選Copy items if needed和 對應(yīng)的target
添加下列依賴到工程
libc++.tbd( 編譯器選 gcc 的請導(dǎo)入libstdc++.tbd)
libz.tbd
libbz2.tbd
AudioToolbox.framework
UIKit.framework
CoreGraphics.framework
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
VideoToolbox.framework
導(dǎo)入 ijkplayer 頭文件運行一下項目, 如果遇到了類似這樣的錯誤:
可能是因為導(dǎo)入的依賴庫不全, 比如缺少 libc++.tbd, 請再次對照添加好所有的依賴庫:
最后就完成了,如有問題請?zhí)釂桙c心,也可以找我要https的完整framework
IJKPlayer分享鏈接: https://pan.baidu.com/s/1g1K92_8ByF9fr5ZGwzTQBw 提取碼: b3cj?