1.参考
ijkplayer是B站bilibili的一个开源项目,支持iOS端和Android端视频点播、直播功能。本文主要讲述如何将ijkplayer制作好的framework,集成到自己的项目中,并使用。
制作framework流程可参考我的另一篇文章iOS端集成ijkplayerB站视频播放直播framework(上)
iOS端制作自己的framework文件
已集成的项目CodeDemo
git 解决文件上传超过100m不能上传的问题
iOS集成ijkplayer支持rtsp流播放并使用播放样例
2.集成
添加依赖
使用ijkplayer需要集成以下依赖
VideoToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreMedia.framework
CoreVideo.framework
libbz2.tbd
libz.tbd
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
UIKit.framework
AudioToolbox.framework
我这个生成的framework需要依赖
libstdc++.6.0.9.tbd
xcode如果找不到了,可以参考我的另一篇文章iOS-Xcode暂时解决libstdc++问题
添加IJKMediaFramework.framework
将IJKMediaFramework.framework添加到自己的项目中,记得勾选Copy items if needed
IJKMediaFramework.framework集成到项目中后如图
此时先编译一下试试,看看能否通过。我这里有报错
Undefined symbols for architecture arm64:
"operator delete(void)", referenced from:
_ijk_map_destroy in IJKMediaFramework(ijkstl.o)
std::__1::__tree<std::__1::__value_type<long long, void>, std::__1::__map_value_compare<long long, std::__1::__value_type<long long, void>, std::__1::less<long long>, true>, std::__1::allocator<std::__1::__value_type<long long, void> > >::destroy(std::__1::__tree_node<std::__1::__value_type<long long, void>, void>) in IJKMediaFramework(ijkstl.o)
std::__1::__tree<std::__1::__value_type<long long, void>, std::__1::__map_value_compare<long long, std::__1::__value_type<long long, void>, std::__1::less<long long>, true>, std::__1::allocator<std::__1::__value_type<long long, void> > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<long long, void>, std::__1::__tree_node<std::__1::__value_type<long long, void>, void>, long>) in IJKMediaFramework(ijkstl.o)
"operator new(unsigned long)", referenced from:
_ijk_map_create in IJKMediaFramework(ijkstl.o)
std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<long long, void>, std::__1::__tree_node<std::__1::__value_type<long long, void>, void>, long>, bool> std::__1::__tree<std::__1::__value_type<long long, void>, std::__1::__map_value_compare<long long, std::__1::__value_type<long long, void>, std::__1::less<long long>, true>, std::__1::allocator<std::__1::__value_type<long long, void*> > >::__emplace_unique_key_args<long long, std::__1::piecewise_construct_t const&, std::__1::tuple<long long const&>, std::__1::tuple<> >(long long const&, std::__1::piecewise_construct_t const&&&, std::__1::tuple<long long const&>&&, std::__1::tuple<>&&) in IJKMediaFramework(ijkstl.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
此时先编译一下试试,看看能否通过。我这里有报错,参考
iOS-集成IJK的那些坑,在项目的TARGETS-Build Phases-Link Binary With Libraries添加库libstdc++.6.0.9.tbd,重新编译即可通过
注意
IJKMediaFramework.framework添加到项目中后,并且可编译通过后,如果你使用了SVN管理项目的话,需要先确认一下,有没有上传文件大小限制。
我的项目是使用Git管理的,需要上传到GitHub,悲剧的是Git有文件超过100M不能push的限制。幸好上传IJKMediaFramework.framework后只做了本地提交,没有做别的处理。
注意
IJKMediaFramework.framework添加到项目中后,并且可编译通过后,如果你使用了SVN管理项目的话,需要先确认一下,有没有上传文件大小限制。
我的项目是使用Git管理的,需要上传到GitHub,悲剧的是Git有文件超过100M不能push的限制。幸好添加IJKMediaFramework.framework文件后只做了本地提交,没有做别的处理。
我这里显示参考了文章git 解决文件上传超过100m不能上传的问题,但是还是没有解决问题。由于时间关系,决定git上不再上传该文件。
运行demo的时候,需要自行下载文件并添加到项目中。链接:https://pan.baidu.com/s/16zuYxCNFqBo3iGTNjYb6tA 密码:7j32