iOS端使用ijkplayer播放視頻

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


屏幕快照 2019-04-10 15.42.09.png

IJKMediaFramework.framework集成到項目中后如圖


屏幕快照 2019-04-10 15.33.30.png

此時先編譯一下試試,看看能否通過。我這里有報錯
屏幕快照 2019-04-10 15.50.15.png

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

3.使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容