一、引言:
ijkplayer是一款对FFmpeg封装非常好的第三方开源播放器,遗憾的是,ijkplayer2.0似乎不开源,并且1.0版本更新也基本停止了,很多公司都会采用ijkplayer作为其播放应用的内核,这款集合软硬件编解码功能的播放器确实备受青睐,从这篇文章开始,将对ijkplayer播放器做一个剖析,希望对大家理解ijkplayer有一定的帮助,当然,不对的地方还望指正。

二、环境搭建及编译:
1.环境搭建:
ijkplayer的GitHub地址如下:

https://github.com/bilibili/ijkplayer

通过阅读工程的readme可以帮我们快速搭建ijkplayer的环境,想要在我们自己的工程中使用ijkplayer的话,需要java层的依赖和底层的库,前者直接在gradle中添加如下依赖:

dependencies {# required, enough for most devices.compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'# Other ABIs: optionalcompile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'# ExoPlayer as IMediaPlayer: optional, experimentalcompile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

想要正确编译出ijkplayer的jni库需要NDK和SDK,NDK的工具包可在Android的官网下载。从我实测的经验来看,r14e~r10e的版本是可以编译过的,太新或者太久的版本都不行,建议大家下载这中间的版本,NDK和SDK的编译工具包下载完之后,根据自己的服务器或者虚拟机环境将包含NDK和SDK路径的环境变量导入如下:

export ANDROID_NDK=/home/xxx/android-ndk-r10e
export PATH=$PATH:ANDROID_NDK
export ANDROID_SDK=/home/xxx/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

2.编译:
JNI库的编译,我们依次执行如下指令即可:

./init-android.sh
cd android/contrib
./compile_ffmpeg.sh clean
./compile_ffmpeg.sh all (默认是只编译armv7)  armv5 armv7a arm64 x86 x86_64
cd ..
./compile_ijk.sh all

这里需要注意如下问题,第一步是通过ijkplayer的脚本去下载FFmpeg的源码,一共有5个架构的源码,所以这里会耽搁比较久的时间,接下来就是编译对应架构的FFmpeg库,脚本后面跟all是编译所有架构,当然,也可以选择编译自己已知平台的架构,常用的架构有armv7aarm64。最后一步就是去编译ijkplayer的库了,也是可以选择自己需要的架构,当编译完成后,将生成如下三个动态库:
libijkffmpeg.so
libijkplayer.so
libijksdl.so

三、运行demo:
通过Android studio打开ijkplayer源码中的工程ijkplayer-example,可以通过主动创建lib文件夹将上面生成的三个库打包到里面,也可以通过adb推入到单板的system/lib下面,之后,将demo编译完后安装到自己的平台中,即可以播放码流了。需要注意的是,如果播放测试码流闪退,极有可能是三个库的缺失导致的。

四、源码路径介绍:
ijkplayer的源码路径有点复杂,很多人不知道调试的时候,应该修改哪些地方的,这里着重说一下。
进入根目录,我们着重关注下面一个路径:

android/ios分别对应不同的OS平台;
config文件夹下面是几个脚本,用于配置我们的ijkplayer及FFmpeg的,如果项目中有必要裁剪库的,请关注这里;
extra文件下面是ijkplayer使用的第三方软件,请注意,修改这里面的FFmpeg源码并没有效果;
ijkmedia这里面就是ijkplayer的源码了,包括ijkplayer的jni及sdl源码的实现,这个文件夹非常重要;
因为我使用的是Android平台, 接下来进入android目录:

contrib目录下面就是各个架构的FFmpeg的源码了,修改了这里的源码,推入libijkffmpeg.so才会有效果;
ijkplayer目录是java工程的所在,ijkplayer-example就是在这个目录下;

五、总结:
这一篇比较轻松,简单介绍了下ijkplayer的编译及使用,下一篇将开始从官方demo开始,看ijkplayer是如何调入到jni库中去的。

ijkplayer播放器剖析(一)让ijkplayer播起来相关推荐

  1. ijkplayer播放器剖析(四)音频解码与音频输出机制分析

    ijkplayer播放器剖析系列文章: ijkplayer播放器剖析(一)从应用层分析至Jni层的流程分析 ijkplayer播放器剖析(二)消息机制分析 ijkplayer播放器剖析(三)音频解码与 ...

  2. ijkplayer播放器剖析(六)视频同步与渲染机制分析

    一.引言: 在前面的博客中,将音频解码播放及视频解码都分析了,这篇博客将单独针对视频同步及渲染来分析,看下ijkplayer是如何做的.本博客分析的同步方式为以音频为主,视频去同步音频. 二.同步前提 ...

  3. ijkplayer播放器剖析(三)音频解码与音频输出机制分析

    一.引言: 在前面的博客中,我们对ijkplayer整个jni的流程及消息机制都详细的分析了一遍,分析流程机制有助于我们对整个架构有一个大致的了解,便于后续对音视频解码与输出渲染的分析,消息机制的分析 ...

  4. ijkplayer播放器剖析(五)视频解码线程分析

    一.引言: 在上一篇博客中,将音频的解码和输出放在了一起分析,文章显得又长又冗杂,考虑到视频渲染及同步也是一个重点分析点,所以这篇博客仅分析视频解码相关的内容.因为ijkplayer和FFmpeg在音 ...

  5. IjkPlayer播放器秒开优化以及常用Option设置

    IjkPlayer播放器秒开优化以及常用Option设置 96 GexYY 关注 1.5 2018.04.19 13:28* 字数 592 阅读 10797评论 9喜欢 32 ijkplayer和ff ...

  6. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...

  7. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  8. IJKPlayer播放器支持https流程

    前言: 笔者最近一段时间在搞视频直播相关的东西,虽然很早以前,也做过基于腾讯云.Anychat.容联云等几个第三方的实时视频直播,但是当时的播放器完全采用了第三方的东西,本次则是使用的ijkplaye ...

  9. 【音视频】ijkplayer播放器参数说明文档

    [音视频]ijkplayer播放器参数说明文档 pragma mark - IJKMediaPlayback #pragma mark 通知IJKMPMediaPlaybackIsPreparedTo ...

最新文章

  1. Fastdfs-企业级分布式存储应用
  2. Eclipse Java注释模板设置详解,更改 ${user}和${date}
  3. 机器学习(二十八)——Monte-Carlo
  4. glibc升级_CentOS7下升级GLIBC2.31
  5. yum安装openoffice
  6. brew卸载jenv_使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK
  7. springMVC异常拦截
  8. (二)Linux 权限
  9. WiFi抓包图形化版本
  10. PostgreSQL 常用函数
  11. 那些你不愿说给领导的话
  12. python移动文件但不覆盖_怎么做到Python file重复写入之前的内容不被后写入的覆盖...
  13. 【源码解析】StyleNeRF 之Train_encoder.py
  14. C语言中汉字的存储和输出
  15. 以太网采用的拓扑结构基本是什么型
  16. CSDN官方markdown教程
  17. 大学四年,老哥推荐小伙伴们几个网站
  18. 文件上传的http请求类(zip文件)
  19. 票据 计算机 英语,银行常用英语:汇款汇票汇单用语
  20. 3D游戏场景管理概述

热门文章

  1. 超强交互原型设计工具:Axure RP 10 Beta最新功能
  2. 河北计算机专科学校排行,河北2017计算机专业专科学校排名
  3. Linux 线程间通信方式、进程通信方式
  4. 使用PageHelper分页插件手动分页,其他查询数据出现串连问题
  5. Java 1070 结绳
  6. java笔试完一般多久给通知_笔试之后多久收到面试通知?权威统计来啦~
  7. 安全基线(Linux和Windows篇)讲的很详细,内有学习资料
  8. 单目、双目及深度相机比较
  9. 2022-2028全球激光印刷电路板钻孔机器行业调研及趋势分析报告
  10. 四川大学(新生赛)羊工八刀(为解决)