环境:XCode9
打开Mac的terminal执行以下脚本命令拉取ijkplayer源码和编译依赖库ffmpeg:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
我拉取了当前最新的版本k0.8.8,具体的集成请参考:《带你走进脚本世界,ijkplayer之【init-ios.sh】脚本分析》和《【如何快速的开发一个完整的iOS直播app】(播放篇)》。
如图,打开IJKMediaDemo项目:
image.png
直接运行项目,发现编译失败:
image.png
错误提示:
ld: library not found for -lcrypto
xCode在编译工程时,遇到类似的
ld: library not found for -l...
的错误提示,原因:
通常这是由于工程在编译时找不到需要的链接库而导致的。
而这里具体是缺少crypto的库,这是openssl的东西,初步假设是ijkplayer k0.8.8版本强制依赖openssl库以支持播放https加密视频。
为了进一步验证假设,重复上面的命令,拉取ijkplayer k0.6.1版本的源码及依赖库ffmpeg:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.6.1
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
用xCode打开IJKMediaDemo项目,直接运行,可以编译成功并成功运行。所以上面缺少openssl库的问题确实只是ijkplayer k0.8.8版本才有的问题。
如图,在ijkplayer-ios
根目录下有一个init-ios-openssl.sh
脚本,在ijkplayer-ios/ios
目录下有一个compile-openssl.sh
脚本:
-
init-ios-openssl.sh
脚本:拉取openssl源码 -
compile-openssl.sh
脚本:编译openssl源码
执行命令拉取openssl源码和编译openssl:
$ cd .. 进入到ijkplayer的目下
$ ./init-ios-openssl.sh 去远程仓库拉取openssl的远程代码
$ cd ios
$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all
编译成功后,发现ijkplayer-ios/ios/
目录下多了如图红圈中的5个文件夹:
build
目录下:
在build/universal/lib
目录下找到libcrypto.a
和libssl.a
文件,这就是前面编译失败缺失的链接库。要想xcode编译工程时找到这个链接库,就需要对工程进行相应的配置。
xCode选中当前项目target->Build Settings->Library Search Paths, 现在先只在Debug环境添加一条路径,将libcrypto.a
文件所在目录的路径添加进来。
重新运行项目,编译成功,成功运行!
参考:
《在xcode下用openssl写dh密钥交换,遇到“ld: library not found for -lcrypto”问题(已解决)》
《ijkplayer库的编译带OPENSSL》
网友评论