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不能上傳的問題,但是還是沒有解決問題。由于時間關(guān)系,決定git上不再上傳該文件。
運行demo的時候,需要自行下載文件并添加到項目中。鏈接:https://pan.baidu.com/s/16zuYxCNFqBo3iGTNjYb6tA 密碼:7j32