1.參考
ijkplayer是B站bilibili的一個(gè)開(kāi)源項(xiàng)目,支持iOS端和Android端視頻點(diǎn)播、直播功能。本文主要講述如何用該開(kāi)源項(xiàng)目制作framework,方便集成到自己的項(xiàng)目中。
iOS直播之ijkplayer的集成與簡(jiǎn)單使用(播放)
制作frameworkiOS端制作自己的framework文件
使用制作好的framwork播放視頻iOS端使用ijkplayer播放視頻
ijkplayer下載地址:https://github.com/Bilibili/ijkplayer。使用的版本是提交cced91e3ae3730f5c63f3605b00d25eafcf5b97b,Commits on Feb 6, 2018
ijkplayer使用案例CodeDemo
2.實(shí)戰(zhàn)
環(huán)境準(zhǔn)備
需要Mac安裝homebrew、git、yasm、pkg-config(非必須)。
1.檢查Mac是否已安裝
brew -v
git --version
yasm --version
pkg-config --verison
2.安裝
安裝homebrew
/usr/bin/ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
安裝git
brew install git
安裝yasm
brew install yasm
安裝pkg-config
brew install pkg-config
環(huán)境準(zhǔn)備
獲取項(xiàng)目到本地
ijkplayer是B站的一個(gè)開(kāi)源項(xiàng)目,iOS端和Android端均支持。本篇文章僅說(shuō)明iOS端的使用。
首先需下載該開(kāi)源項(xiàng)目到本地合適的目錄https://github.com/Bilibili/ijkplayer。我是在桌面新建文件夾ijkplayer。下載方式我是選擇了直接下載,下載解壓后重命名為ijkplayer-ios。

參考其他人的文章,可以新建分支,在分支上工作。這里我們是在自己的Mac上進(jìn)行的,不需要提交,在master即可。下載解壓重命名后不需要進(jìn)行任何一步操作。
下載ffmpeg
cd 到ijkplayer-ios
注意,如果項(xiàng)目需要支持iOS8,ijkplayer也需要添加armv7s。打開(kāi)init-ios.sh文件,將44行改為
FF_ALL_ARCHS_IOS8_SDK="armv7 armv7s arm64 i386 x86_64"
然后再執(zhí)行init-ios.sh文件
./init-ios.sh
時(shí)間比較長(zhǎng),不要著急


添加 https 支持
根據(jù)需要添加https支持,可以不添加。
cd 到ijkplayer-ios
./init-ios-openssl.sh
cd 到ijkplayer-ios/ios
在compile-ffmpeg.sh文件中添加一行配置,我是添加到了158-164任意一行后面
echo'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"'>> ../config/module.sh
cd 到ijkplayer-ios/ios
./compile-ffmpeg.sh clean
編譯ffmpeg
cd 到ijkplayer-ios/ios
打開(kāi)compile-ffmpeg.sh文件,將24行改為
FF_ALL_ARCHS_IOS8_SDK="armv7 armv7s arm64 i386 x86_64"
將159行改為
?echo "? compile-ffmpeg.sh armv7|armv7s|arm64|i386|x86_64"
依次執(zhí)行以下命令
./compile-openssl.sh all
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
打包IJKMediaFramework.framework框架
這里采用簡(jiǎn)單的做法
1)首先打開(kāi)工程IJKMediaPlayer.xcodeproj

2)添加https支持和相關(guān)包
如果按照本文章操作,可以忽略該步驟。(本文中執(zhí)行該步驟,是找不到libcrypto.a和?libssl.a文件的,可能現(xiàn)在已經(jīng)不需要這兩個(gè)文件了。參考其他人的文章,有該步驟的說(shuō)明)
如果不需要支持https,不用執(zhí)行此步驟;如果前面有執(zhí)行添加 https 支持操作,需要進(jìn)行此步驟。
項(xiàng)目中打開(kāi)TARGETS-IJKMediaFramework,打開(kāi)Build Phases,打開(kāi)Link Binary With Libraries,選擇+。在彈出框中,選擇Add Other,打開(kāi)目錄ijkplayer-ios/ios/build/universal/lib,選擇文件libcrypto.a和?libssl.a
3)編譯framework
項(xiàng)目中打開(kāi)TARGETS-IJKMediaFramework,選擇Edit Scheme,選擇Run-Info ,將Build Configuration 的值改為Release


分別選擇任意一個(gè)模擬器和Generic iOS Device ,快捷鍵commad+B編譯framework


編譯完成后,打開(kāi)項(xiàng)目的Products目錄,可以看到有一個(gè)IJKMediaFramework.framework文件。右鍵點(diǎn)擊該文件,Show In Finder

合成framework文件。具體步驟可查看我的另一篇文章iOS端制作自己的framework文件
3.使用ijkplayer播放視頻
具體步驟可以參考我的另一篇文章iOS端使用ijkplayer播放視頻
4.問(wèn)題集
1)執(zhí)行命令./compile-ffmpeg.sh all,報(bào)錯(cuò)
報(bào)錯(cuò)如下:
AS libavcodec/arm/aacpsdsp_neon.o
./libavutil/arm/asm.S:50:9: error: unknown directive
? ? ? ? .arch armv7-a
解決辦法:
打開(kāi)文件compile-ffmpeg.sh,去掉文件中的armv7,注意要修改的地方:
第22行 改為: FF_ALL_ARCHS_IOS6_SDK="armv7s i386"
第23行 改為: FF_ALL_ARCHS_IOS7_SDK="armv7s arm64 i386 x86_64"
第24行 改為: FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
第120行 改為: if [ "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
第159行 改為: echo " compile-ffmpeg.sh arm64|i386|x86_64"
再重新執(zhí)行./compile-ffmpeg.sh all命令即可

2)編譯framework報(bào)錯(cuò)
報(bào)錯(cuò)相關(guān)armv7,如圖

解決辦法:
項(xiàng)目中打開(kāi)TARGETS-IJKMediaFramework,在Build Setting中搜索armv7,刪去armv7。
