1.编译平台和版本

  • 使用操作系统 Ubuntu 18.04
  • 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错)
  • AS版本:4.2.2

1.1 安装git:

sudo apt install git

1.2 配置java环境:

解压JDK:

sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt

配置环境变量:

sudo gedit /etc/profile

文末添加

export JAVA_HOME=/opt/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

同步:

source /etc/profile

1.3 配置SDK的环境变量

export PLATFORM_TOOLS=/opt/sdk/platform-tools
export PATH=$PATH:$PLATFORM_TOOLS

1.4 配置NDK的环境变量

export ANDROID_NDK=/opt/android-ndk-r14b
export PATH=$PATH:$ANDROID_NDK

2. 编译ijkplayer

由于github非常慢,可以使用gitee的极速下载仓库:https://gitee.com/mirrors/ijkplayer.git

2.1 下载ijkplayer

使用命令git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android

git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
```shell
执行命令
```shell
cd ijkplayer-android
# 用最新的稳定版本
git checkout -B k0.8.8

2.2 执行init-android脚本

从github下载ffmpeg、libyuv超级慢,这里改成码云的链接

init-android.sh的FFmpeg.git改为https://gitee.com/yuazhen/FFmpeg.git



如果我们只想编译armv7a的版本(修改init-android.sh)

init-android-libyuv.sh的改为:https://gitee.com/yuazhen/libyuv.git

然后再执行init-android.sh

./init-android.sh

2.3 初始化openssl支持https

先修改文件init-android-openssl.sh,将对应的openssl链接改为码云链接。

IJK_OPENSSL_UPSTREAM=https://gitee.com/yuazhen/openssl.git
IJK_OPENSSL_FORK=https://gitee.com/yuazhen/openssl.git

如果我们只想编译armv7a的版本(修改init-android-openssl.sh)



然后在执行

./init-android-openssl.sh

2.4 配置编码器格式支持

在module-default.sh最底部增加以下两行

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib”
默认为最少支持,如果足够你使用,可以跳过这一步,否则可以改为以下配置:
module-default.sh更多的编解码器/格式,同时支持ts格式的视频,例如一些电视台的m3u8 格式
module-lite-hevc.sh较少的编解码器/格式(包括 hevc)
module-lite.sh较少的编解码器/格式(默认情况)
==========================================================
1.如果您喜欢更多编解码器/格式
cd config // 进入config目录
rm module.sh // 删除module.sh脚本
ln -s module-default.sh module.sh // 指定默认脚本软连接到module.sh
source module.sh // 重新执行刚修改的文件初始化,使之立即生效 2.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(包括hevc函数)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
source module.sh 3.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(默认情况下)
cd config
rm module.sh
ln -s module-lite.sh module.sh
source module.sh 这里我们就选择第1个,不要问我为什么,小朋友都知道越多越好
然后修改 module-default.sh,在文件末尾追加如下两行
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

2.5 支持rtsp

默认的ijkplayer并不支持rtsp流的播放,因为在编译ffmpeg的时候并没有开启rtsp的demuxer,所以在编译ffmpeg的时候需要开启rtsp的demuxer

cd ijkplayer-android/config
vim module-lite.sh // 如果没有配置2.4步骤,则在这个脚本添加,否则在module-default.sh添加
#在相关地方加入如下两行代码
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"

3 编译

3.1 编译openssl

# 进入android/contrib目录
cd android/contrib
# 清除openssl的编译文件
./compile-openssl.sh clean
# 编译openssl
./compile-openssl.sh armv7a

./compile-openssl.s`h后跟 all表示编译所有CPU架构的so库,如果只编译指定CPU架构的so库,后面就跟CPU架构,比如:./ compile-ffmpeg.sh armv7a`

3.2 编译ffmpeg

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh armv7a

3.3 编译ijkplayer

cd ..
./compile-ijk.sh clean
./compile-ijk.sh armv7a

稍作等待ing...编译成功后,当前目录下的ijkplayer的里面的库和文件就更新了。导出ijkplayer项目作为library依赖就可以了。

注意

编译的时候有可能会报错,例如我就遇到了ERROR:Failed to create toolchain,这个是因为没有安装python,可以参考

ijkplayer 编译 遇到的几个问题

4 使用编译成功的ijkplayer库

上面如果编译成功了,会生成ijkplayer-android/android/ijkplayer。将该目录整个拷贝出来,导入到Android studio。

ijkplayer目录实际上就是一个project。直接用Android studio,File->open 导入进行编译,编译成功后,导入手机,选择手机上的视频文件进行播放。到这里即可验证我们成功编译了ijkplayer。

4.1 导入到自己的项目工程中

  1. 将你需要的平台so库拷贝到libs目录下。

  2. 再将编译后的ijkplayr工程目录下的ijkplayer-java/build/outputs/arr/ijkplayer-java-release.arr也复制到新建工程文件的libs目录下。

  3. 修改新建工程app模块下的build.gradle文件

  4. 接下来就可以在项目中使用IjkMediaPlayer了

参考资料

ijkplayer支持播放rtsp、jpeg、gif

ijkplayer-android编译与使用说明

记一次ijkplayer编译旅程

编译ijkplayer-android

ijkplayer开启rtsp,并且支持录制和截图功能

ijkplayer编译-RTSP的更多相关文章

  1. 小试ijkplayer编译

    同步发表于 http://avenwu.net/ijkplayer/2015/05/07/hands_on_ijkplayer_preparation 谈到视频播放大家都知道ffmpeg,基于其的衍生 ...

  2. Swift基础--ijkplayer编译

    这篇与Swift基本上没有什么关系,只是之后会用到,这次编译是使用Mac编译IOS版本号的.以下是编译流程,最后是整个项目的下载地址.由于下载太慢了. 1.下载源代码 git clone https: ...

  3. Ubuntu下编译Bilibili/ijkplayer

    在做Android客户端视频播放器的过程中熟悉ijkplayer.他在视频支持协议上要比Android原生的mediaplayer做的要好.因此,自己也基于Bilibili/ijkplayer的重新编 ...

  4. ijkplayer之.so文件编译过程

    本文转载:ijkplayer编译so库真没那么难: 1.如何使用ijkplayer 官方:https://github.com/Bilibili/ijkplayer build.gradle添加下述依 ...

  5. ijkplayer导入AS时,出现more than one library with package name错误

    最近刚接触ijkplayer ,在ubuntu 中将ijkplayer编译后,导入Windows中AS时,出现以下错误,目前初步定为为包重名,但具体原因未定为到,麻烦有遇到这方面的朋友,给指导下,

  6. android studio 3.0 集成ijkplayer

    一.ijkplayer编译过程略,有兴趣的朋友可以再研究,以下以编译好的版本讲解. 将ijkplayer相关的so及aar文件复制到app下的libs目录,为支持多版本的手机使用,将所有的so文件都复 ...

  7. Eclipse集成ijkplayer并实现本地和网络视频播放等

    概述 Eclipse 集成ijkplayer demo,播放本地视频.和rtmp流. 详细 代码下载:http://www.demodashi.com/demo/10630.html 原文地址:Ecl ...

  8. IJKPlayer如何支持https

    给ijkplayer安装支持https 首先使用如下终端命令安装yasm 第一: 1. curl http://www.tortall.NET/projects/yasm/releases/yasm- ...

  9. ubuntu-15.04 下编译 ijkplayer 安卓版

    我的环境: 1.win7 主系统 2.VirtualBox 5.1.2 虚拟机 3.ubuntu-15.04-desktop-amd64.iso 镜像文件 4.android-ndk-r10e-lin ...

  10. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

随机推荐

  1. docker之redis集群部署

    docker之redis集群部署 PART01: 3主3从redis集群部署 3主3从redis集群配置 关闭防火墙,启动docker服务 如果报以下错误,应该是docker 服务没有启动,可以执行下 ...

  2. mysql 索引优化 explain,复合索引,联合索引,优化 user_base 和 log_login 实战

    本节是关于MySQL的复合索引相关的知识,两个或更多个列上的索引被称作复合索引,本文主要介绍了mysql 联合索引生效的条件及失效的条件 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可 ...

  3. NC15688 Operating System

    题目链接 题目 题目描述 在学习Operating System的过程中,Glory遇到了这样一个问题,现在有一个大小为可以容纳N个页面的内存,硬盘内的内容被分成M个页面,用1~M来标识,一开始内存里 ...

  4. Maven多模块项目版本统一管理

    如图所示,项目中定义了这样几个模块: pdd-workflow-build :定义项目版本,及全局配置 pdd-workflow-dependencies :外部依赖管理,统一管理所有用到的外部依赖的 ...

  5. 基于 junit5 实现 junitperf 源码分析

    前言 上一节介绍了基于 junit4 实现 junitperf,但是可以发现定义变量的方式依然不够优雅. 那可以让用户使用起来更加自然一些吗? 有的,junit5 为我们带来了更加强大的功能. 拓展阅 ...

  6. 【分布式】load balance 02-consistent hash algorithm 一致性哈希算法原理详解

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 概念 一致哈希是一种特殊的哈希算法. 在使用一致哈希算 ...

  7. Android自动化测试框架uiautomator2详解

    1 uiautomator2 简介 ​ uiautomator2 是 一种 Android 自动化测试框架,提供了点击.长按.输入文本.滑动.拖拽.截屏等方法,能够模拟用户的各种动作.用户可以通过控件 ...

  8. 斐讯K3C改散热

    斐讯K3C改散热 斐讯K3C日常使用还是不错的,就是日常的温度还是比较高的,不过冬天用来当暖手宝还是不错的. 这个改散热的方法是跟贴吧老哥学的,不得不说贴吧老哥还是牛皮,原贴在这,我当时拍的照片不够, ...

  9. Java设计模式-桥接模式Bridge

    传统模式 案例 要求对不同手机类型的不同品牌实现操作编程(比如:开机.关机.上网,打电话等),如图: 类图 问题 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类, ...

  10. Java序列化(Serializable)与反序列化详解

    什么是序列化? Java序列化是在JDK 1.1中引入的,是Java内核的重要特性之一. Java序列化API允许我们将一个对象转换为流,并通过网络发送,或将其存入文件或数据库以便未来使用, 反序列化 ...