记录一下编译ijkplayer过程

一、环境

1.1、VMware + ubuntu
1.2、安装git、vim

sudo apt install git
sudo apt install vim

二、配置编译环境

2.1、配置AndroidSDK环境

2.1.1、下载AndroidSDK
wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz

国内下载地址:下载网站: http://tools.android-studio.org/index.php/sdk/

2.1.2、解压
tar -xvf android-sdk_r24.4.1-linux.tgz

解压后如图:

从Readme中可以知道需要执行更新指令:

2.1.3、执行更新命令
tools/android update sdk --no-ui
2.1.4、配置环境变量

打开配置文件:

vim /etc/profile

添加环境变量:

# android-sdk
export ANDROID_SDK=/home/zzy/Library/AndroidSDK/android-sdk-linux # 需要替换成自己的路径
export PATH=$ANDROID_SDK:$PATH

生效环境变量

source /etc/profile

2.2、配置NDK环境

2.2.1、下载NDK
https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip?hl=zh-cn

ijkplayer默认只支持11~14版本的ndk

2.2.2、解压
unzip android-ndk-r14b-linux-x86_64.zip
2.2.3、配置环境变量
vim /ect/profile

添加环境变量:

export ANDROID_NDK=/home/zzy/Library/android-ndk-r14b # 替换自己的路径
export PATH=$PATH:$ANDROID_NDK

生效环境变量

source /etc/profile
2.2.4、校验环境变量是否生效
ndk-build --version

三、 下载ijkplayer

3.1、下载ijkplayer

wget https://codeload.github.com/bilibili/ijkplayer/zip/refs/tags/k0.8.8

最好的办法肯定是用git下载,但是我使用git下载几次都出现错误所以只能使用wget下载。
注册:
一定要使用控制台下载,我一开始不是使用控制台下载,在编译的最后异步报错:

Error: Android.mk:1: *** missing separator. Stop.

解压:

unzip k0.8.8

3.2、执行init-android.sh

进入ijkplayer解压后的目录:

为了加快初始化的编译速度,可以有以下3个选择配置(也可以不做):

  • 可选配置1:修改ffmpeg下载地址
    执行init-android.sh会下载ffmpeg等,如果网络条件不好可以修改下载地址,改为码云地址。
  • 可选配置2:
    选择ffmpeg拉取版本,默认会拉取所有版本,在这里可以修改只拉取指定版本
  • 可选配置3:
    init-android.sh会执行init-android-libyuv.sh指令拉取libyuv,可以修改libyuv下载地址

执行初始化命令:

./init-android.sh

3.3、初始化openssl 支持 https

为了加快编译速度,可以有以下两个配置,打开init-android-openssl.sh :

  • 可选配置1:修改openssl 下载地址
  • 可选配置2:指定编译版本,比如arm64

    执行脚本:
./init-android-openssl.sh

3.4、配置解码器编译格式

进入config目录,在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-vda"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

config目录下有三种配置:

更多的编解码器/格式
module-default.sh较少的编解码器/格式 (包含hevc)
module-lite-hevc.sh#较少的编解码器/格式 默认
module-lite.sh

一般我们使用module-default.sh配置,执行如下指令:

# 删除当前的module.sh
rm module.sh
# 使用module-default.sh配置
ln -s module-lite.sh module.sh

3.5、编译openssl

# 进入android/contrib 目录
cd android/contrib/# 清除openssl编译文件
./compile-openssl.sh clean# 编译openssl
./compile-openssl.sh all
# 也可以指定编译平台 ./compile-openssl.sh armv7a

3.5、编译ffmpeg

cd android/contrib/./compile-ffmpeg.sh clean./compile-ffmpeg.sh all
# 也可以指定编译平台 ./compile-ffmpeg.sh armv7a

注意:这里可能会报一个错误:
ERROR: Failed to create toolchain.
解决方案:安装python:

apt install python

3.6、编译ijkplayer

最后一步,执行 compile-ijk.sh 编译ijkplayer

# 回到android目录
cd .../compile-ijk.sh clean./compile-ijk.sh all
# 也可以指定编译平台 ./compile-ijk.sh armv7a

编译完成后,可以在ijkplayer中android目录下查看编译结果:

3.6、编译报错问题

错误1:在编译ffmpeg的时候还会遇到错误
BFD: libncurses.so.5: cannot open shared object file: No such file or directory
解决办法:

请依次执行如下命令:
sudo apt install apt-file
sudo apt-file update
sudo apt-file find libncurses.so.5
sudo apt install libncurses5

错误2: Error: Android.mk:1: *** missing separator. Stop.
编译到最后一步的时候出了这个错误,后来才发现我是因为我一开始不是使用控制台下载ijkplayer源码导致的,使用控制台下载就好了

参考:https://www.jianshu.com/p/8a1b663a3d2e
视频参考:https://www.bilibili.com/video/BV1VU4y1m7cm?spm_id_from=333.337.search-card.all.click

Ijkplayer编译相关推荐

  1. [IJKPLAYER]编译与DEMO运行

    前言 系统:UBUNTU 16.04桌面版 编译步骤,主要还是参考README.md中Build Android的描述 Android/iOS video player based on FFmpeg ...

  2. Ijkplayer编译成Android的so库的详细步骤

    Ijkplyer简介 本人在做网络摄像头的时候遇到的一个需求就是要做一个手机app能够实时看rtsp流传过来的视频,首先当然是用MediaPlayer去播放视频,结果是延时的要命,自己写一个播放器框架 ...

  3. ijkPlayer编译-Android

    1. 简介 ijkplayer是哔哩哔哩的一个开源视频播放框架,支持Android.iOS.底层是ffplay. Github地址:bilibili/ijkplayer 2. 编译方法 由于通过Gra ...

  4. ijkplayer编译脚本解析(一)

    源码下载编译,脚本里除去源码下载部分,编译部分如下 ./init-android.sh ​ cd android/contrib ./compile-ffmpeg.sh clean ./compile ...

  5. Android ijkplayer 编译踩坑与记录(ijk0.8.8--ffmpeg4.0)

    本文记录了 ijkplayer 的编译完整流程,以及编译过程中遇到的坑及解决方案,如果不想自己编译,可以使用我编译好的结果.已放入 github: ijkplayer_Build4Android 编译 ...

  6. ijkplayer编译.so

    最近做直播平台,包括推流端.服务器.及播放端.现在用到手机播放rtmp流,查找第三方库ijkplayer可以实现该功能. ijkplayer开源库地址https://github.com/Bilibi ...

  7. 【错误记录】编译 Android 版本的 ijkplayer 报错 ( You must define ANDROID_NDK before starting. | 下载指定版本 NDK )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在编译 ijkplayer 的过程中 , 出现 root@octopus:~/ijkplayer/ijkplayer-android/android ...

  8. Mac全量编译ijkplayer生成Android库

    ijkplayer编译 Pangu-Immortal (Pangu-Immortal) · GitHub GitHub地址:GitHub - bilibili/ijkplayer: Android/i ...

  9. win10子系统编译android,基于win10子系统ijkplayer全量编译(支持所有格式)流程

    1 环境搭建 1.1 编译环境说明 ijkplayer目前支持linux,mac平台编译.windows平台暂不支持.如果没有linux环境,可以使用win10自带的子系统ubuntu进行编译.win ...

最新文章

  1. 隐藏和伪装端口banner
  2. 强java_Java (强/弱/软/虚)引用
  3. linux用m4重定向,liunx重定向控制台消息
  4. EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性
  5. 读完《云原生架构白皮书》,我们来谈谈开放应用模型(OAM)
  6. Java解析SQL生成语法树_Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python...
  7. 【干货】后疫情时代,那些迎来爆发机会的产业.pdf(附下载链接)
  8. 大数据分析平台建模及建议
  9. Rational Rose安装使用教程
  10. Java基础SE.03.Java面向对象
  11. 揭秘 | 2021年移动云API大赛决赛大奖花落谁家?
  12. matlab根号下是多项式,多项式求根
  13. python3.7爬虫
  14. c++和c语言之间有什么区别
  15. python评论情感分析毕业设计_使用文本挖掘技术进行小说《圣墟》评论的情感分析——基于python...
  16. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
  17. JS中的event 对象详解
  18. Guava - Maps.difference
  19. 计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统
  20. 学习hadoop大数据基础框架需要什么基础

热门文章

  1. 大话Java反射机制
  2. 泉州海事学校计算机,初赛公示_2020年全国高校计算机能力挑战赛
  3. Asp.net 基础
  4. Java实现List,Map,Set 遍历的多种方式
  5. 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫
  6. 南京睿督分享|欧盟建材CE认证体系有哪几种模式?
  7. 2013计算机应用基础试题及答案,2013年计算机应用基础试题及答案教材.doc
  8. PCB布局布线(3)——PCB接地设计
  9. 运营商车联网布局再提速 智能化创新激发产业热情
  10. Microsoft Office Word 遇到问题需要关闭。我们对此引起的不便表示抱歉。