Ubuntu 18.04 编译 ijkplayer
Ubuntu 18.04 编译 ijkplayer 1. 配置安装源
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu
2. 配置好安装源后,安装一些组件
$ sudo apt update
$ sudo apt install vim openssh-server git curl wget tar unzip
$ sudo apt install build-essential openjdk-8-jdk yasm python
3. 下载sdk-manager
https://developer.android.com
$ wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
如果在Windows,可通过putty的psftp复制sdk-tools-linux-3859397.zip到linux系统
4. 解压sdk-manager
$ unzip ~/sdk-tools-linux-3859397.zip -d ~/android-sdk
5. 更新tools
$ touch ~/.android/repositories.cfg // 可忽略
$ ./sdkmanager --update
提示许可协议,输入y回车,然后耐心等待,提示done表示完成。
6. 查看可安装列表
$ cd ~/android-sdk/tools/bin
$ ./sdkmanager --list
记住最新的sdk build tools
7. 安装sdk build-tools和ndk
$ cd ~/android-sdk/tools/bin
$ ./sdkmanager "build-tools;27.0.3" // "ndk-bundle"
下载14版本的NDK
$ cd ~
$ wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
$ unzip android-ndk-r14b-linux-x86_64.zip -d ~/android-sdk
8. 删除无用的压缩包,备份android-sdk目录
$ cd ~
$ rm ~/sdk-tools-linux-3859397.zip ~/android-ndk-r14b-linux-x86_64.zip
$ tar cvzf android-sdk-ndkr14b.tar.gz android-sdk 编译ijkplayer项目
一、准备源码
https://github.com/Bilibili/ijkplayer#build-android
1. 配置环境变量
$ export ANDROID_SDK=$HOME/android-sdk
// $ export ANDROID_NDK=$ANDROID_SDK/ndk-bundle //此项目最高支持NDK14的版本,因此用下面的位置。
$ export ANDROID_NDK=$ANDROID_SDK/android-ndk-r14b
2. 下载ijkplayer源代码
$ cd ~
$ git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
$ cd ijkplayer-android
$ git checkout -B latest k0.8.8
3. 下载相关的android ffmpeg源代码
$ ./init-android.sh
4. 备份源码
$ cd ~
$ tar cvzf ijkplayer-android.tar.gz ijkplayer-android
二、编译
1. 用bash代替dash
$ sudo dpkg-reconfigure dash
选择NO
如果新打开的shell,记得按“一1”配置ANDROID_SDK和ANDROID_NDK环境变量。
2. 选择解码包
(1)默认是较少的codec/format生成较小尺寸的包。
(2)在(1)的基础上包含hevc功能
(3)最多的codec/format
如果选择(1)请直接到下一步。否则继续操作:
$ cd ~/ijkplayer-android/config
$ rm module.sh
$ ln -s module-lite-hevc.sh module.sh <<<< (2)
$ ln -s module-default.sh module.sh <<<< (3)
注意,选择(2)需要为ffmpeg额外安装latm,选择(3)可能需要手动安装更多的外部库。
3. 编译ffmepg
$ cd ~/ijkplayer-android/android/contrib
$ ./compile-ffmpeg.sh clean
$ ./compile-ffmpeg.sh all
成功进行下一步。
如果报错:fatal error: linux/perf_event.h: No such file or directory
$ vim ~/ijkplayer-android/config/module.sh
在结尾加入这一行:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
保存后执行
$ ./compile-ffmpeg.sh clean
$ ./compile-ffmpeg.sh all
4. 编译ijkplayer
$ cd ~/ijkplayer-android/android
$ ./compile-ijk.sh all
5. 备份成果
$ cd ~
$ tar cvzf ijkplayer-android-build.tar.gz ijkplayer-android
三、使用
# Android Studio:
# Open an existing Android Studio project
# Select android/ijkplayer/ and import
#
# define ext block in your root build.gradle
# ext {
# compileSdkVersion = 23 // depending on your sdk version
# buildToolsVersion = "23.0.0" // depending on your build tools version
#
# targetSdkVersion = 23 // depending on your sdk version
# }
#
# If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
# sh android/patch-debugging-with-lldb.sh armv7a
# Install Android Studio 2.2(+)
# Preference -> Android SDK -> SDK Tools
# Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
# Open an existing Android Studio project
# Select android/ijkplayer
# Sync Project with Gradle Files
# Run -> Edit Configurations -> Debugger -> Symbol Directories
# Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
# Run -> Debug 'ijkplayer-example'
# if you want to reverse patches:
# sh patch-debugging-with-lldb.sh reverse armv7a
#
# Eclipse: (obselete)
# File -> New -> Project -> Android Project from Existing Code
# Select android/ and import all project
# Import appcompat-v7
# Import preference-v7
#
# Gradle
# cd ijkplayer
# gradle
Ubuntu 18.04 编译 ijkplayer的更多相关文章
- Ubuntu 18.04编译AOSP源码
总结一下我从Ubuntu 18.04下编译成功AOSP的过程,以及遇到的坑 我的电脑配置: OS: Ubuntu 18.04 bionic Kernel: x86_64 Linux 4.18.0-17 ...
- ubuntu 18.04编译opencv3.4.3 with python3.6 cuda9.2 gdal
惭愧,之前一直没在linux下编译过opencv,也没用过纯命令行版的cmake,现在咬牙编译一次.其实感觉还凑合. opencv官网文档还是那么烂:https://docs.opencv.org/m ...
- [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程
标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...
- ubuntu 18.04下编译最新版本的KMS
KMS:kurento媒体服务,即 kurento media server 很庞大的一个WEBRTC项目,GIT库主项目:https://github.com/Kurento 基础实现,修改了gst ...
- Ubuntu 18.04 手动编译安装 ffmpeg
ffmpeg 是一个由提供对视频.音频和其他多媒体流文件进行处理功能的库和程序构成的自由软件项目,其常被用于适用于不同格式的音频和视频的录影.转换和流处理等场合.这里记录在 Ubuntu 18.04 ...
- 加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04)
加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04) 前言 加密通信软件Signal是开源的,安全性很高,号称斯诺登也推荐大家使用.既然这么好,那必然会有不少人去尝试复制 ...
- Ubuntu 18.04 WMware 编译 AOSP android-7.1.2_r33 笔记
0 前言 问:都快2022年了,为什么还要编译 android 7.1.2 ? 答:某脱壳机特征修改或移植到其他机型(此处省略1000字...) 笔者在编译之前并没有加入专有二进制文件(后续加入了再补 ...
- Ubuntu 18.04 安装部署Net Core、Nginx全过程
Ubuntu 18.04 安装部署Net Core.Nginx全过程 环境配置 Ubuntu 18.04 ,Nginx,.Net Core 2.1, Let's Encrypt 更新系统 sudo a ...
- 记录在Ubuntu 18.04系统中安装Apache, MySQL和PHP环境
虽然我们在Linux VPS.服务器安装WEB环境比较方便,可以选择面板或者一键包,但是有些我们需要深入学习的网友不会选择一键安装,而是会尝试编译安装.这样可以学到一些内在的技术.一般我们较为习惯选择 ...
随机推荐
- 面向对象 - 1.软件开发/2.异常处理/3.try...except的详细用法
1.软件开发 软件的开发其实一整套规范,我们所学的只是其中的一小部分,一个完整的开发过程,需要明确每个阶段的任务,在保证一个阶段正确的前提下再进行下一个阶段的工作,称之为软件工程 面向对象的软件工程包 ...
- Java 集合框架之 JDK 1.5 新特性
forEach 循环 多用于元素迭代. 适用范围: - 数组 - 实现 Iterable 接口的集合类 格式: for(类型 变量 : Collection 集合 | 数组) { } 传统 for 和 ...
- pycharm的MySQLdb模块导不进去时解决办法
一.Windows下python2.7安装MySQLdb模块 根据Python多少位下载对应版本: 32位:https://pypi.python.org/pypi/MySQL-python/1.2. ...
- Java应用多机器部署定时任务解决方案
Java多机部署下定时任务的处理方案. 本文转自:http://www.cnblogs.com/xunianchong/p/6958548.html 需求: 有两台服务器同时部署了同一套代码, 代码中 ...
- 缓存在中间件中的应用机制(Django)
缓存在中间件中的应用机制(Django) (右键图片:在新标签页中打开连接)
- Leetcode 之 Set Mismatch
645. Set Mismatch 1.Problem The set S originally contains numbers from 1 to n. But unfortunately, du ...
- (转)live555在Linux下最简单地实现实时流媒体点播
通过Live555交叉编译后运行发现,上面实现的流媒体实时通过文件服务器的文件点播,没有相关的流媒体实现方式, 但在Linux下,可以通过某些技巧实现Live555服务器实时流媒体服务器,并且是傻瓜式 ...
- 编程语言的介绍(Day2)
1.什么是编程,为什么要编程? 编程==编写程序(写代码) 2.编程语言有哪些 机器语言 优点是最底层,速度最快,缺点是最复杂,开发效率最低 汇编语言 优点是比较底层,速度最快,缺点是复杂,开发效率最 ...
- go——结构体(二)
Go语言是一种静态类型的编程语言.这意味着,编译器需要在编译时知晓程序里每个值的类型. 如果提前知道类型信息,编译器就可以确保程序合理的使用值. 这有助于减少潜在的内存异常和bug,并且使编译器有机会 ...
- Python(迭代、三元表达式、列表生成、生成器、迭代器)
迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...