高能

iOS端使用ijkplayer播放视频

2019-04-10  本文已影响102人  卖萌笑嘻嘻

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不能上传的问题,但是还是没有解决问题。由于时间关系,决定git上不再上传该文件。
运行demo的时候,需要自行下载文件并添加到项目中。链接:https://pan.baidu.com/s/16zuYxCNFqBo3iGTNjYb6tA 密码:7j32

3.使用

上一篇下一篇

猜你喜欢

热点阅读