ijkplayer 的編譯、打包 framework 和 https 支持

ijkplayerbilibili 開源的一款優秀的播放器, 基於 FFmpeg, 支持 iOS/Android, 點播/直播, 以及多種編碼. 官方並不直接提供 framework 框架包, 這樣你們能夠根據須要選擇配置, 本身編譯並打包. 可是也讓不少第一次使用的小夥伴一臉懵逼, 而且默認配置只支持 http, 若是想播放 https 連接的視頻, 那麼須要作額外的配置ios

本文爲 iOS 的編譯打包過程, 環境爲 Mac + Xcodec++

準備工做

安裝 homebrew, git, yasm. (若是已經安裝好能夠跳過, 不清楚的再來一遍也無妨)git

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
複製代碼

獲取 ijkplayer 源碼

在一個合適的位置新建一個文件夾, 假設爲桌面, 文件夾名爲 ijkplayer.github

打開終端, 輸入下面的指令xcode

# 進入到剛剛新建的文件夾內
cd ~/Desktop/ijkplayer/

# 獲取ijkplayer源碼
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

# 進入源碼目錄
cd ijkplayer-ios

# 切換分支 (目前爲k0.8.8, 能夠自行去GitHub查看最新版本號)
git checkout -B latest k0.8.8
複製代碼

配置編解碼器格式支持

默認爲最少支持, 若是足夠你使用, 能夠跳過這一步. 不然能夠改成如下配置:ruby

  • module-default.sh 更多的編解碼器/格式
  • module-lite-hevc.sh 較少的編解碼器/格式(包括hevc)
  • module-lite.sh 較少的編解碼器/格式(默認狀況)
# 進入 config 目錄
cd config

# 刪除當前的 module.sh 文件
rm module.sh

# 可根據須要替換爲`module-default.sh`, `module-lite-hevc.sh`, `module-lite.sh`
# 建立軟連接 module.sh 指向 module-lite-hevc.sh
ln -s module-lite-hevc.sh module.sh

cd ..
cd ios
sh compile-ffmpeg.sh clean
複製代碼

獲取 ffmpeg 並初始化

cd ..
./init-ios.sh
複製代碼

添加 https 支持

最後會生成支持 https 的靜態文件 libcrypto.alibssl.a, 若是不須要能夠跳過這一步app

# 獲取 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`, 請執行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再從新執行下一步

# 編譯openssl, 若是不須要https能夠跳過這一步
./compile-openssl.sh all

# 編譯ffmpeg
./compile-ffmpeg.sh all
複製代碼

ps: 若是提示錯誤:框架

./libavutil/arm/asm.S:50:9: error: unknown directive
        .arch armv7-a
        ^
make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
複製代碼

最新的 Xcode 已經弱化了對 32 位的支持, 解決方法: 在 compile-ffmpeg.sh 中刪除 armv7 , 修改如: FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64" 再從新執行出現錯誤的命令: ./compile-ffmpeg.sh allcurl

打開 IJKMediaPlayer 項目

用命令:iphone

open IJKMediaPlayer/IJKMediaPlayer.xcodeproj
複製代碼

或者手動用 Xcode 打開 ios 目錄下的 IJKMediaPlayer 項目.

添加 openssl 相關包以支持 https

若是不使用 https, 能夠跳過此步, 直接開始打包 framwork

若是使用 https, 那麼須要手動給 IJKMediaFramework 添加 libcrypto.alibssl.a 文件, 默認不會添加

ps: 這兩個依賴庫的目錄爲: ijkplayer-ios/ios/build/universal/lib, 只有進行了上面跟 openssl 相關的操做, 纔會在這個目錄下有生成 libcrypto.alibssl.a

WX20180408-234339@2x.png

打包 framwork

你們會發現除了 IJKMediaFramework 這個 target, 還有一個叫 IJKMediaFrameworkWithSSL, 可是不推薦使用這個, 由於大部分基於 ijkplayer 的第三方框架都是使用的前者, 你把後者導入項目仍是會報找不到包的錯誤, 就算你要支持 https 也推薦使用前者, 而後按照上一步添加 openssl 便可支持

  1. 配置 Release 模式若是下圖

    WX20180408-234722@2x.png
    WX20180408-234922@2x.png

  2. 打包真機 framework

    選擇你鏈接的手機或者 Generic iOS Device

    WX20180408-235726@2x.png

    如圖操做,而後按鍵 command+b 編譯便可

    若是以前的步驟刪除了 compile-ffmpeg.sharmv7, 這裏會報錯, 咱們直接註釋掉就好

    WX20180408-235314@2x.png
    WX20180408-235507@2x.png

  3. 打包模擬器 framework

    WX20180408-235921@2x.png

    如圖操做,而後 command+b 編譯便可

  4. 合併 framework

    若是隻須要真機運行或者模擬器運行, 能夠不用合併, 直接找到對應的 framework 導入項目便可; 通常咱們爲了方便會合並 framework, 這樣就同時支持模擬器和真機運行.

    先找到生成 framework 的目錄:

    WX20180409-001503@2x.png
    WX20180409-001745@2x.png

    準備合併:

    打開終端, 先 cdProducts 目錄下

    而後執行: lipo -create 真機framework路徑 模擬器framework路徑 -output 合併的文件路徑

    lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
    複製代碼

    合併完成:

    能夠看到這裏生成了一個大概兩倍大小的文件, 將生成的 IJKMediaFramework 文件替換掉 真機framework 中的 IJKMediaFramework 文件,而後這個替換掉文件的 真機framework 就是咱們須要的 通用的framework 了。

    WX20180409-002747@2x.png
    WX20180409-003815@2x.png

集成 framework 到項目中

  • 導入 framework

    直接將 IJKMediaFramework.framework 拖入到工程中便可

    注意記得勾選 Copy items if needed 和 對應的 target

  • 添加下列依賴到工程

    1. libc++.tbd ( 編譯器選 gcc 的請導入 libstdc++.tbd )
    2. libz.tbd
    3. libbz2.tbd
    4. AudioToolbox.framework
    5. UIKit.framework
    6. CoreGraphics.framework
    7. AVFoundation.framework
    8. CoreMedia.framework
    9. CoreVideo.framework
    10. MediaPlayer.framework
    11. MobileCoreServices.framework
    12. OpenGLES.framework
    13. QuartzCore.framework
    14. VideoToolbox.framework

導入 ijkplayer 頭文件運行一下項目, 若是遇到了相似這樣的錯誤:

WX20180409-005101@2x.png

多是由於導入的依賴庫不全, 好比缺乏 libc++.tbd, 請再次對照添加好全部的依賴庫:

WX20180409-005102@2x.png
相關文章
相關標籤/搜索