Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

    • 服务端

    • 跨端技术

    • Web IDE

    • 中后台

    • 动效渲染

    • 可视化

    • 埋点监控

    • 多媒体

      • 业务场景

      • 基础知识

        • H5视频直播—JSMPEG源码解析、视频压缩编码、MPEG-1标准
        • H5音频直播—探索历程、aurora.js源码解析、音频编码基本原理
        • ffmpeg

          • Ubuntu 14下ffmpeg2.6编译和剪裁(librtmp,h264,aac) 及Android开发
            • 前言
            • 配置Java环境
            • 配置android linux NDK以及SDK
              • Android studio 2.1 download
              • 配置 sdk ndk 环境变量
            • 从ffmpeg官网下载ffmpeg源码包
            • 修改 ffmpeg/configure 文件
            • 安装类库
              • 安装基本的工具类库
              • Yasm
              • libx264
              • librtmp的支持
              • 编译脚本和配置选项
        • flv

        • webrtc

    • 桌面技术

    • 游戏互动

    • 编辑器

    • 虚拟化与容器化

    • 设计系统

  • 业务场景

  • 大前端
  • 专业领域
  • 多媒体
  • 基础知识
  • ffmpeg
gahing
2016/07/10
目录

Ubuntu 14下ffmpeg2.6编译和剪裁(librtmp,h264,aac) 及Android开发

# 前言

本来写的是最新版3.0的 但是遇到太多坑,编译老错 换老版本的2.6

# 配置Java环境

如果只是编译ffmpeg 该步骤非必要,仅是做个记录 从http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (opens new window)下载jdk8

下载完文件默认在 ~/Downloads

    ~# cd Downloads
    ~/Downloads# sudo mkdir /usr/java       //创建目录用于存放
    ~/Downloads# sudo tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/java //解压
    ~/Downloads# cd /usr/java/
    /usr/java# sudo mv jdk-8u91-linux-x64  jdk8  //改名,后面配置就比较方便
    /usr/java# sudo gedit /etc/environment
    //如果发现错误,可能是gedit的命令(usr/bin)没添加到系统环境下
    //如果不能访问 就chmod 777 /etc/environment  
    //并且在environment中配置的只有root用户有效 且关闭终端后无效因此配置在/etc/profile最好
    //再这里我们可以用gedit的全路径 也可以用vim
    // 先按照
    sudo apt-get install vim
    /usr/java# sudo vim /etc/profile
    //vim命令:dd删除一样 yy复制一行 p粘贴 在environment中加入
     export JAVA_HOME=/usr/java/jdk8
     export JRE_HOME=/usr/java/jdk8/jre
     export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
     export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
     > ubuntu启动后 先加载environment再加载profile
     //注意 要按顺序写 比如JAVA_HOME写在后面 PATH的$JAVA_HOME就是空了
     //:wq 保存退出
     注意 要重启。且注意这边配置要小心 否则会开不了机
     java -version 查看jdk版本 输出信息则成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 配置android linux NDK以及SDK

如果只是编译ffmpeg 只要下载sdk ndk并配置环境就可以

# Android studio 2.1 download

参考:https://developer.android.com/studio/install.html (opens new window) 下载android studio 2.1 https://developer.android.com/studio/index.html (opens new window) (拖到下面有各种版本)

/usr# sudo mkdir android
~/Downloads# unzip xxx.zip -d /usr/android 将xxx文件解压到android目录下

Note: If you are running a 64-bit version of Ubuntu, you need to install some 32-bit libraries with the following command:

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6

利用/bin/studio.sh可以启动android-studio

Tip: Add android-studio/bin/ to your PATH environment variable so you can start Android Studio from any directory.

运行studio.sh

`error:`unable to detect graphics environment
xdg_runtime_dir not set in the environment

参考 http://www.cnblogs.com/gaodong/p/3463152.html
加上 `export DISPLAY=:0.0`

切换到界面窗口 按步骤安装 可以选择之前下好的sdk

然后创建 helloworld项目 运行..(话说,真是卡。。)

还是用命令吧..

# 配置 sdk ndk 环境变量

sdk下载https://developer.android.com/studio/index.html 下方 ndk下载https://developer.android.com/ndk/downloads/index.html

类似配置:PATH=$PATH:/home/android_sdk/tools:/home/android_sdk/ndk

# 从ffmpeg官网下载ffmpeg源码包

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# 没安装git的先安装
sudo apt-get install git
1
2
3

# 修改 ffmpeg/configure 文件

将该文件

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

修改为:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

这样编译出来的so命名才符合android的使用

接下来这些参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

# 安装类库

# 安装基本的工具类库

sudo apt-get update
sudo apt-get install build-essential checkinstall git libfaac-dev libjack-jackd2-dev   libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev    libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev texi2html zlib1g-dev       libssl1.0.0 libssl-dev libxvidcore-dev libxvidcore4 libass-dev
1
2

# Yasm

一个汇编程序被推荐用于x264 和 ffmpeg (只要解码不知道这样要不要装 蛮装了 如果 库中 yasm package ≥ 1.2.0 可以这样

sudo apt-get install yasm
1

否则只能

cd ~/ffmpeg_sources
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
make distclean
1
2
3
4
5
6
7
8

# libx264

更多的详见https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 我只需要解码的 这边我就不需要安装了

# librtmp的支持

自带的rtmp只能支持播放非直播的 rtmp(live !=1),而添加 librtmp 之后是可以播放直播的视频 并支持多种格式(rtmp://, rtmpt://, rtmpe://, rtmpte://,以及 rtmps://协议)

cd ~/src
git clone git://git.ffmpeg.org/rtmpdump
cd rtmpdump
make SYS=posix
sudo checkinstall --pkgname=rtmpdump --pkgversion="2:$(date +%Y%m%d%H%M)-git" --backup=no  --deldoc=yes --fstrans=no --default
1
2
3
4
5

# 编译脚本和配置选项

参考https://github.com/dxjia/ffmpeg-compile-shared-library-for-android

  1. 指定临时目录
export TMPDIR=/home/gahing/tmpdir
1
  1. 指定NDK路径
NDK=/home/Downloads/android-linux-sdk/android-ndk-r12b
1
  1. 指定使用NDK Platform版本
SYSROOT=$NDK/platforms/android-16/arch-arm/
1

一定要选择比你的目标机器使用的版本低的

  1. 指定编译工具链
TOOLCHAIN=$ND
K/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
1
2
  1. 指定编译后的安装目录
PREFIX=/home/gahing/ffmpeg_shared_compile/arm
1

示例脚本1 支持所有的编解码器 arm版本

#!/bin/bash export TMPDIR=/home/gahing/tmpdir PREFIX=$HOME/ffmpeg_shared_compile/ NDK=/home/gahing/Downloads/android-sdk-linux/android-ndk-r12b SYSROOT=$NDK/platforms/android-16/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 CPU=arm ADDI_CFLAGS="-marm" function build_one { ./configure
--prefix=$PREFIX
--enable-shared
--disable-static
--disable-doc
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-doc
--disable-symver
--enable-small
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
--target-os=linux
--arch=arm
--enable-cross-compile
--sysroot=$SYSROOT
--extra-cflags="-Os -fpic $ADDI_CFLAGS"
--extra-ldflags="$ADDI_LDFLAGS"
$ADDITIONAL_CONFIGURE_FLAG make clean make make install } build_one

so的全部文件大概8~9M

示例脚本2 本章题目的要求(该脚本有问题 待解救)

#!/bin/bash
make clean
export TMPDIR=/home/gahing/tmpdir
PREFIX=$HOME/ffmpeg_shared_compile/
NDK=/home/gahing/Downloads/android-sdk-linux/android-ndk-r12b
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-avdevice \
--disable-avfilter \
--disable-network \
--disable-encoders \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--disable-muxers \
--disable-demuxers \
--disable-debug  \
--disable-yasm \
--disable-parsers \
--disable-decoders \
--disable-everything \
--enable-nonfree \
--enable-gpl  \
--enable-postproc  \
--enable-vdpau \
--enable-librtmp \
--enable-decoder=h264 \
--enable-decoder=aac  \
--enable-decoder=h264_vdpau\
--enable-parser=aac \
--enable-parser=h264 \
--enable-protocol=rtmp \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG  
}  
  
build_one  
  
make  
make install  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  1. 生成so

运行脚本后 $PREFIX 目录下生成 include和lib两个文件夹,将lib文件夹中的 pkgconfig 目录和so的链接文件删除,只保留so文件,然后将include 和lib两个目录一起copy到你的apk jni下去编译

之后可以参考 http://blog.csdn.net/leixiaohua1020/article/details/47008825 (opens new window)

eclipse下编写jni参考http://www.cnblogs.com/skyseraph/p/3979238.html (opens new window)

编辑 (opens new window)
#ffmpeg#Android
上次更新: 2025/06/11, 23:06:59
H5音频直播—探索历程、aurora.js源码解析、音频编码基本原理
flv格式说明

← H5音频直播—探索历程、aurora.js源码解析、音频编码基本原理 flv格式说明→

最近更新
01
我的 2024 总结
12-31
02
浅谈代码质量与量化指标
08-27
03
快速理解 JS 装饰器
08-26
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式