美文网首页高能
iOS端使用ijkplayer播放视频

iOS端使用ijkplayer播放视频

作者: 卖萌笑嘻嘻 | 来源:发表于2019-04-10 14:44 被阅读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.使用

    相关文章

      网友评论

        本文标题:iOS端使用ijkplayer播放视频

        本文链接:https://www.haomeiwen.com/subject/iviniqtx.html