ijkplayer播放器剖析(一)让ijkplayer播起来
一、引言:
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
是编译所有架构,当然,也可以选择编译自己已知平台的架构,常用的架构有armv7a
和arm64
。最后一步就是去编译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播起来相关推荐
- ijkplayer播放器剖析(四)音频解码与音频输出机制分析
ijkplayer播放器剖析系列文章: ijkplayer播放器剖析(一)从应用层分析至Jni层的流程分析 ijkplayer播放器剖析(二)消息机制分析 ijkplayer播放器剖析(三)音频解码与 ...
- ijkplayer播放器剖析(六)视频同步与渲染机制分析
一.引言: 在前面的博客中,将音频解码播放及视频解码都分析了,这篇博客将单独针对视频同步及渲染来分析,看下ijkplayer是如何做的.本博客分析的同步方式为以音频为主,视频去同步音频. 二.同步前提 ...
- ijkplayer播放器剖析(三)音频解码与音频输出机制分析
一.引言: 在前面的博客中,我们对ijkplayer整个jni的流程及消息机制都详细的分析了一遍,分析流程机制有助于我们对整个架构有一个大致的了解,便于后续对音视频解码与输出渲染的分析,消息机制的分析 ...
- ijkplayer播放器剖析(五)视频解码线程分析
一.引言: 在上一篇博客中,将音频的解码和输出放在了一起分析,文章显得又长又冗杂,考虑到视频渲染及同步也是一个重点分析点,所以这篇博客仅分析视频解码相关的内容.因为ijkplayer和FFmpeg在音 ...
- IjkPlayer播放器秒开优化以及常用Option设置
IjkPlayer播放器秒开优化以及常用Option设置 96 GexYY 关注 1.5 2018.04.19 13:28* 字数 592 阅读 10797评论 9喜欢 32 ijkplayer和ff ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- IJKPlayer播放器支持https流程
前言: 笔者最近一段时间在搞视频直播相关的东西,虽然很早以前,也做过基于腾讯云.Anychat.容联云等几个第三方的实时视频直播,但是当时的播放器完全采用了第三方的东西,本次则是使用的ijkplaye ...
- 【音视频】ijkplayer播放器参数说明文档
[音视频]ijkplayer播放器参数说明文档 pragma mark - IJKMediaPlayback #pragma mark 通知IJKMPMediaPlaybackIsPreparedTo ...
最新文章
- Fastdfs-企业级分布式存储应用
- Eclipse Java注释模板设置详解,更改 ${user}和${date}
- 机器学习(二十八)——Monte-Carlo
- glibc升级_CentOS7下升级GLIBC2.31
- yum安装openoffice
- brew卸载jenv_使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK
- springMVC异常拦截
- (二)Linux 权限
- WiFi抓包图形化版本
- PostgreSQL 常用函数
- 那些你不愿说给领导的话
- python移动文件但不覆盖_怎么做到Python file重复写入之前的内容不被后写入的覆盖...
- 【源码解析】StyleNeRF 之Train_encoder.py
- C语言中汉字的存储和输出
- 以太网采用的拓扑结构基本是什么型
- CSDN官方markdown教程
- 大学四年,老哥推荐小伙伴们几个网站
- 文件上传的http请求类(zip文件)
- 票据 计算机 英语,银行常用英语:汇款汇票汇单用语
- 3D游戏场景管理概述