ijkplayer iOS项目集成教程

作者: 白熊 | 来源:发表于2016-01-04 16:34 被阅读9849次

重新回炉写了一篇带详细图文的,请移步这里

最近接到了视频直播方面的开发任务。第一次接触到视频领域并且周边也没有熟悉这块领域的大牛,只好先找些开源的方案来使用。

比较了两个网上讨论比较多并且支持Android/iOS的项目

  • Vitamio
  • IJKPlayer

首先说下Vitamio目前可以拿到的版本是4.20,商业使用需要付费。
目前手头上的iPhone6s iOS为9.0.2,在播放RTMP直播的情况下反复切到后台或者直接锁屏有很大的几率崩溃。另外Vitamio错误提示不完善,我们QA最喜欢用飞行模式测试大法:你断网了要暂停,网络恢复了要继续播放啊(策划需求)。但是在断网等情况下根本就没回调,即便用了AFNetWorking的网络监测暂停恢复Vitamio也有几率崩溃,根本没法过QA……

IJKPlayer是国内B站的bbcallen大大写的开源视频播放项目。除了B站,美拍和斗鱼的App都有在使用的样子,应该说经得起行业领域的考验了,对我采用IJKPlayer多了一份信心。
后面事实证明,IJKPlayer确实很省心。

将IJKPlayer集成到项目中其实还会遇到不少问题,我将遇到的问题记录下来,希望能帮助到各位,少走些弯路。

我的构建环境

  • OS:Mac OSX 10.11.2
  • iOS:Xcode 7.2
  • HomeBrew
  • Git

安装构建必要的环境

如果因为墙的关系或者速度太慢可以使用proxychains,网上教程很多,就不涉及了。

# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm

构建

下载ffmpeg和编译ffmpeg会花费比较长的时间,可以去泡一杯咖啡:)

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.4.4.1
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

运行

用Xcode打开ios/IJKMediaDemo/IJKMediaDemo.xcodeproj,验证是否构建正确并可以学习如何使用IJKPlayer。

IJKDemoSampleViewController.m //刚开始上手可以先从sampleList加些播放源来试试手
IJKMoviePlayerViewController.m  //这里学习IJKplayer的使用方法

集成

这是比较重要的一步,估计也是最容易卡住的一步。

# import ios/IJKMediaPlayer for MediaPlayer.framework-like interface (recommended)
# open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode

因为本人没Get到上面的点,只好在issue搜索,发现一条关于制作.a文件的提示结果就纠结在制作.a文件上卡了1天(大坑),这个离正确答案很近但它不是正确答案。

集成步骤

1.将ijkplayer整个目录复制到项目中,需要保持ijkplayer内的目录结构,可以删除Android和一些无关的文件,ijkplayer中的目录结构如下:


ijkplayer tree状结构
在ijkplayer目录下的结构

2.将IJKMediaPlayer.xcodeproj拽入项目中,并添加如下类库:


3.移植DEMO项目的代码示例,写死一个播放源,并运行。



完美!

Updated on 2016-05-13

为苦于各种奇怪原因而无法玩耍的小伙伴们提供了包装了ijkplayer的pod,仅供测试体验。
1.基于ijkplayer 5737ccc提交制作成的framework,需要注意的是需要iOS8+
2.如果使用ijkplayer过程中遇到BUG什么的,可以移步去ijkplayer作者的GitHub上提issue或者PR。
哦对了,地址在这里https://coding.net/u/shirokuma/p/IJKMediaLibrary/git,因framework超过100MB无法传到GitHub上,就放到Coding上了。祝各位玩的愉快!

相关文章

网友评论

  • daniulive:ijkplayer和vitamio真正商用,问题太多了,除了个别大公司,基本都搞不定,坑太多。
    建议看看 https://github.com/daniulive/SmarterStreaming
  • 新地球说着一口陌生腔调:现在pod install了 但是 #import <IJKMediaFramework/IJKMediaFramework.h> 依然报错
  • 新地球说着一口陌生腔调:你好 这个库去哪里下载 #import <IJKMediaFramework/IJKMediaFramework.h>
  • 科了个技:作者 请问下ijkplayer怎么支持https协议啊
  • 13149a3d9e65:想问下IJK 怎么支持音频播放?
  • f54923880807:播放rmvb和较大的mp4不显示是咋回事需要打开什么选项吗?
  • Link913:https://github.com/LaiFengiOS/LFLiveKit 的聚焦功能楼主有做吗
    白熊:@SkyHarute 不好意思,这个没做过... :sweat:
  • LayneWang:我想支持rmvb等更多格式,在ijk的git上执行他给出的命令
    cd config
    rm module.sh
    ln -s module-default.sh module.sh
    cd android/contrib
    # cd ios
    sh compile-ffmpeg.sh clean
    然后我的ios文件夹下的build中ffmpeg文件就全部没了。不止楼主怎么处理的?
  • aad60b0bdf82:在线等结果 :sweat:
    白熊:@xiaoshanguo 不好意思,最近一直在忙,ijk不能推流的,不过有个我们正在使用的开源库:https://github.com/LaiFengiOS/LFLiveKit,强烈推荐
  • aad60b0bdf82:哪位 大神 能讲讲 ijkplayer 推流 怎么推啊 有代码 吗
  • sooooooooEasy:个人开发后台服务器的问题怎么解决呢
  • dcb739f00b41:大于80分钟视频不能播放啊
  • 26c2e0608895:不错~
  • leftwater:音频 视频 在线视频。。音频播放如何给他添加图片啊
    白熊:@leftwater 抱歉,这方面我也没有经验
  • f5a615e1a4a1:楼主,打扰了。。想请教一下这个framework是怎么打包的呀,可以指点下吗,谢谢了~~
    白熊:@f5a615e1a4a1 http://www.jianshu.com/p/4f21af680c19,奋战一晚写完了,都是现在这个版本亲自再试一遍可以用了,请过目:)
    f5a615e1a4a1:@白熊 谢谢~之前也看过个类似的,但是编译失败了。。我有点没搞明白,源文件包括哪些东西的?我一开始直接打开IJKMediaPlayer文件夹里面,吧里面的文件都拖进去的,结果编译发现缺少文件,一看缺少少了的。然后我又打开工程,照着里面的文件结构,吧所有文件加进去,包括.a文件,结果还是提示找不到文件,但是这个时候我看提示的地方文件是存在的。。。想问下,这个源文件是从哪边拿的呢,是不是我找错了。。。还有在编译项目的时候,文件夹下面不是对应生成了几个架构的文件吗,为什么我们还要自己打包的?问题可能小白。。。刚接触,希望楼主不要介意~~
    白熊:@f5a615e1a4a1 久等啦~
    framework打包可以参考这篇文章来:http://www.jianshu.com/p/709828379028
    如果还有疑惑也可以使用搜索引擎关键字:“ios framework 制作”
  • 方圆一里:楼主大大, 我把ijkplayer全部拖到自己的项目里了 但是太大了,ijk代码包括ffmpeg都2个G多,太大了,能删些东西么?
    白熊:@22ef76d67f1f 时间有点久远我按照记忆描述可能有点偏差,请见谅啊。
    发布前可以再compile-ffmpeg.sh armv7|arm64编译arm库可以缩小不少体积,https://github.com/Bilibili/ijkplayer/blob/master/ios/compile-ffmpeg.sh,看Usage
  • d7301a9ef836:你好,我xcode跑的它官方demo,执行到这一步# import ios/IJKMediaPlayer for MediaPlayer.framework-like interface (recommended) 把 IJKMediaPlayer.xcodeproj拖拽到工程中以后, IJKMediaFramework里面 《ijksdl_ffinc.h》文件 #include "libavutil/imgutils.h"报错file not found, 是不是因为ffmpeg的库没有链接成功?应该怎么解决,我是完全按照文章的步骤操作来的
    白熊:@Edison_Jiang 因为好些时候没碰了,可能不能准确地帮你解决这个问题,不过曾遇到过类似的问题,是因为没有保持目录结构造成的。即:ijkplayer 目录下ijkmedia和ios文件夹必须在同一级目录(整个目录最好纯英文不要有空格),然后将 IJKMediaPlayer.xcodeproj拖拽进来就解决了。
    如果还不能解决您的问题,可以到官方github提个issue问问,也许就有大神能帮您。
  • ismilesky:您好,问一下为什么我把IJKMediaPlayer.xcodeproj拽入项目中,不能展开呢
    白熊:@ismilesky 我使用的是xcode7.3 拽进去的时候直接就可以展开。你可以尝试删掉IJKMediaPlayer.xcodeproj的关联关系,再拽进来一下试试。或者在一个新项目拖拽。
  • CodingSha:学习这个api主要是看demo里的那个controller里的方法是么?都会了得话就可以写自己的了把?我这有个直接打包好得framework,要用的时候是否直接导入工程和直接加依赖库即可?示例工程里的UI好丑
    白熊:@CodingSha 多摸索摸索,我的情况是注释掉一些代码跑起来看看,或者尝试调整一些参数再跑起来看看会变成什么样。
    学习的过程比直接知道结果更有意义不是么:)
    CodingSha:@白熊 我发现h文件中的方法属性都没注释呀,好难搞啊
    白熊:@CodingSha 1.是的,只要学会基本使用方法即可,剩下就是配置比如打开硬解或者重新加载播放器,项目完成后我已经2个月没碰了...记得在作者github中有人在issue中留了个第三方的qq交流群,你可以加一下。
    2.是的,只需要加载对应的依赖即可
    3.你可以完全不用工程里的UI,那个是xib画的。你看看b站,斗鱼什么的也都是用自己画的UI。
  • 092a90adc13c:兄弟有没有使用cocopods导入的教程...
    白熊:@小名儿晗晗 请看我下面的updated,已经将ijk做成pod了,如果学习也可以参照我里面的podspec
    f82d386a50d5:我尝试做了,可是还是失败了。cocoapods就是validation failure...请大家一起来帮忙
    白熊:@菜鸟的菜 官方并没有提供cocoapods,因为https://github.com/Bilibili/ijkplayer/issues/411,
    但是可以自己做一个对应的framework和一个标准cocoapods通过vendored_framework来引入。相对比较麻烦,如果没有特殊需求还是建议你打包成framework直接引入项目比较快些。
  • 丶Destinyxl:demo 可以运行了 但是
    # import ios/IJKMediaPlayer for MediaPlayer.framework-like interface (recommended)
    # open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode
    这两段是什么意思? 不太懂命令行 ,可以帮忙解读一下吗? 也是需要在终端跑吗? 谢谢 :pray:
    ismilesky:把IJKMediaPlayer.xcodeproj拖进项目里面不能展开,什么问题???? 3Q
    丶Destinyxl:@白熊 新手小白,麻烦可以加下你QQ吗?
    白熊:@LL_Summit 意思其实很简单,就是让你把IJKMediaPlayer.xcodeproj拽入项目中当framework使用
  • xclidongbo:我对你的目录结构还是不清楚。
    白熊:@xclidongbo 目录结构其实就是ijkplayer github上那一样的,保持一致即可.我追加了一份新截图你可以看看.
  • 旁蟹棒:谢谢分享~麻烦问下,如果我想做做基于RTMP的直播的话ijkplayer该怎么使用呢
    旁蟹棒:您好,麻烦问下,我这边用ijk播放本地的mp4文件,只有声音没有画面是什么情况呢?
    旁蟹棒:@白熊 嗯嗯好的呢~我这里现在刚接手直播相关的功能开发~谢谢您的回复
    白熊:@旁蟹棒 最直接的方式就是体验下DEMO
    1.跟着我这文章走到运行那步骤,也就是IJKMediaDemo可以成功编译和运行
    2.先把玩下demo,然后往IJKDemoSampleViewController的sampleList中加入你的rtmp直播地址,然后进入IJKMoviePlayerViewController学习,关键的API都在这里了。
    祝你成功~

本文标题:ijkplayer iOS项目集成教程

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