环境准备
集成ijkplayer需要电脑中安装git
和yasm
,然后好像还需要一个pkg-config
(不确定),安装git
、yasm
和pkg-config
可以使用homebrew
。
检查自己电脑是不是安装了homebrew
、git
、yasm
可以打开终端依次输入:
brew -v
git --version
yasm --version
pkg-config --verison
我的已经安装了
环境配置成功
安装成功可以忽略以下内容直接查看第一章节,如果没有安装成功请继续,首先打开终端
安装homebrew
:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果想卸载homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
homebrew
的用法:
安装软件,如:brew install oclint
卸载软件,如:brew uninstall oclint
搜索软件,如:brew search oclint
更新软件,如:brew upgrade oclint
查看安装列表, 如:brew list
更新Homebrew,如:brew update
使用homebrew
安装git
brew install git
使用homebrew
安装yasm
brew install yasm
使用homebrew
安装pkg-config
brew install pkg-config
一、使用git克隆仓库到本地
ijkplayer是bilibili的一个开源项目https://github.com/Bilibili/ijkplayer
在合适的位置新建文件夹(不想新建也可以的😂),我是在桌面上新建文件夹命名为showcase
,然后进入对应文件夹
cd /Users/jizhigang/Desktop/showcase //这是我的路径啊看准喽
clone
一个仓库有两种方式,使用https
方式和SSH
方式,我们选择https
方式,使用SSH
方式继续执行可能出错⚠️
使用https地址
//克隆仓库到指定位置并重命名为ijkplayer-ios
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
有时候clone
仓库时会出现问题
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
这个错误是因为项目太久,tag资源文件太大,我们clone
时可以这样
//克隆仓库到指定位置并重命名为ijkplayer-ios,深度为1的代码,具体什么意思我不是特别清楚就不乱解释了啊,免得误导别人
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios --depth=1
仓库clone成功
然后进入文件夹ijkplayer-ios
cd ijkplayer-ios
新建分支latest
并切换到新建的分支上
git checkout -B latest k0.8.8
我们平时开发最好不要在
master
分支上直接开发,所以这里我按照教程新建了分支latest
。但是我们不需要提交代码,所以这里不新建分支也是可以的,新建与否都对后续各步骤没有影响。
可以使用命令查看当前分支
git branch
可以看到当前有了两个分支latest
和master
,并且当前工作在latest
分支上
分支创建并切换成功
配置编解码器格式支持
默认为最少支持, 如果足够你使用, 可以跳过这一步. 否则可以改为以下配置:
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
./init-ios.sh //时间稍长一些
下载`ffmpeg`成功
添加 https 支持
最后会生成支持 https 的静态文件 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
然后进入ios
文件夹中
cd ios
三、 编译ffmpeg
# 如果下一步提示错误`xcrun: error: SDK "iphoneos" cannot be located`, 请执行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再重新执行下一步
# 编译openssl, 如果不需要https可以跳过这一步
./compile-openssl.sh all
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all //编译
这里有可能遇到错误
xcrun -sdk iphoneos clang is unable to create an executable file.
C compiler test failed.
造成这个问题的原因有很多,这里我是因为xcode
路径问题引起的,解决方法:
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer
这里还遇到了另一个问题
AS libavcodec/arm/aacpsdsp_neon.o
./libavutil/arm/asm.S:50:9: error: unknown directive
.arch armv7-a
^
make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
make: *** Waiting for unfinished jobs....
最新的 Xcode 已经弱化了对 32 位的支持, 解决方法:
在compile-ffmpeg.sh
中删除armv7
, 修改如:FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
再重新执行出现错误的命令:./compile-ffmpeg.sh all
去掉armv7支持
去掉armv7支持
去掉armv7支持
然后再次执行
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all //编译
编译成功
打开ios/IJKMediaPlayer
并运行。大功告成