ubuntu ffmpeg

ubuntu14.04

下载ffmpeg ffmpeg-4.2.1
http://ffmpeg.org/download.html

用android studio创建一个程序,再下载ndk
在这里插入图片描述

修改configure
由于编译生成动态库文件名的版本号在so的后面,android平台不能识别这样的动态库,因此需要修改一下
打开找到build settings,修对应的宏修改成下面那样

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

在解压根目录下创建 build.sh,用于编译
NDK路径为android studio下载的ndk路径 :/home/c2-1222/SoftWare/ndk-bundle

ndk在教程中使用的是ndk r9d

Android NDK

#!/bin/bash
# 清空上次的编译
make clean
#你自己的NDK路径。
# export NDK=/home/c2-1222/SoftWare/ndk-bundle
export NDK=/home/c2-1222/SoftWare/ndk-bundle
# 设置你的android平台编译器的版本 这里采用Android4.0 
export SYSROOT=$NDK/platforms/android-21/arch-arm/
#编译使用的toolchain
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
# 这个是输出的路径
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=android \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--disable-shared \
--enable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--enable-nonfree \
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
--enable-ffserver \
--enable-doc \
--enable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAG  
--enable-bzlib
make clean
make
make install




安装环境:
下面的所有操作要注意权限问题,记得加上sudo

【1】安装yasm
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make && sudo make install
 
【2】安装g++  cmake
apt install g++  cmake
 
【3】安装SDL2-2.0 (这里选择SDL2版本的),用于生成ffplay,否则不会生成ffplay
apt install libsdl2-2.0-0 libsdl2-dev libsdl2-doc
 
【4】安装fdk-acc
wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
tar xvf fdk-aac-0.1.6.tar.gz
cd fdk-aac-0.1.6
./configure
make && sudo make install
 
【5】安装lame
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xzf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make && sudo make install
 
 
【6】安装nasm
wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
tar xvf nasm-2.13.03.tar.gz
cd nasm-2.13.03
./configure
make && sudo make install
 
【7】安装x264视频编解码库
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-static --enable-shared --disable-asm --disable-avs
make && sudo make install
 
【8】安装x265视频编解码库
wget -c http://mirror.yandex.ru/mirrors/ftp.videolan.org/x265/x265_2.6.tar.gz
tar -zxvf x265_2.6.tar.gz 
cd /x265_v2.6/build/linux 
./make-Makefiles.bash
make  && make install  

编译ffmpeg
sh build.sh
在这里插入图片描述

ubuntu 18.04

#!/bin/bash
#下面三个宏需要根据你的环境修改
NDK=/home/toby/Software/android-ndk-r7b
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
 
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
./configure \
  --prefix=$PREFIX \
  --enable-shared \
  --disable-static \
  --disable-doc \
  --enable-cross-compile \
  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  --target-os=linux \
  --arch=arm \
  --sysroot=$SYSROOT \
  --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
  --extra-ldflags="$ADDI_LDFLAGS" \
  $ADDITIONAL_CONFIGURE_FLAG
build_one
make -j4
make install

ubuntu16.04安装ffmpeg最新版

在ubuntu本机上源码编译使用 ffmpeg

./configure   --enable-shared  --prefix=ubuntu/  --enable-gpl  --disable-doc
sudo make -j

编译完成后,

发现没有编译到ffplay,它需要安装sdl包

执行命令,出现如下错误:

ffmpeg-2.0.2$ ./ubuntu/bin/ffmpeg 
./ubuntu/bin/ffmpeg: error while loading shared libraries: libavdevice.so.55: cannot open shared object file: No such file or directory

发现依懒库没有找到

ldd bin/ffmpeg 
	linux-vdso.so.1 (0x00007ffe68b83000)
	libavdevice.so.55 => not found
	libavfilter.so.3 => not found
	libavformat.so.55 => not found
	libavcodec.so.55 => not found
	libpostproc.so.52 => not found
	libswresample.so.0 => not found
	libswscale.so.2 => not found
	libavutil.so.52 => not found
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f755e041000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f755de22000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f755da31000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f755e610000)

需要单独增加环境变量,或将其加入bashrc文件中
增加安装目录的动态链接库:

export LD_LIBRARY_PATH=ubuntu/lib:$LD_LIBRARY_PATH

如下可以使用了

toby@Toby:~/Code/FFMPEG_iOS/ffmpeg-2.0.2$ ./ubuntu/bin/ffmpeg 
ffmpeg version 2.0.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on May 30 2020 16:10:06 with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --enable-shared --prefix=ubuntu/ --enable-gpl --disable-doc
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100

再查依懒库也找到了:

ldd bin/ffmpeg 
	linux-vdso.so.1 (0x00007ffdc7b92000)
	libavdevice.so.55 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libavdevice.so.55 (0x00007f39f33e2000)
	libavfilter.so.3 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libavfilter.so.3 (0x00007f39f30f2000)
	libavformat.so.55 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libavformat.so.55 (0x00007f39f2d7a000)
	libavcodec.so.55 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libavcodec.so.55 (0x00007f39f1e86000)
	libpostproc.so.52 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libpostproc.so.52 (0x00007f39f1c67000)
	libswresample.so.0 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libswresample.so.0 (0x00007f39f1a50000)
	libswscale.so.2 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libswscale.so.2 (0x00007f39f17f0000)
	libavutil.so.52 => /home/toby/Code/FFMPEG_iOS/ffmpeg-2.0.2/ubuntu/lib/libavutil.so.52 (0x00007f39f15ab000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f39f120d000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f39f0fee000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f39f0bfd000)
	libXv.so.1 => /usr/lib/x86_64-linux-gnu/libXv.so.1 (0x00007f39f09f8000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f39f06c0000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f39f04ae000)
	libsndio.so.6.1 => /usr/lib/x86_64-linux-gnu/libsndio.so.6.1 (0x00007f39f029e000)
	libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f39eff97000)
	libSDL-1.2.so.0 => /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 (0x00007f39efcff000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f39efae2000)
	libva.so.2 => /usr/lib/x86_64-linux-gnu/libva.so.2 (0x00007f39ef8c1000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f39f3824000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f39ef699000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f39ef495000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f39ef28d000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f39ef078000)
	libpulse-simple.so.0 => /usr/lib/x86_64-linux-gnu/libpulse-simple.so.0 (0x00007f39eee73000)
	libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f39eec23000)
	libcaca.so.0 => /usr/lib/x86_64-linux-gnu/libcaca.so.0 (0x00007f39ee95a000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f39ee756000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f39ee550000)
	libpulsecommon-11.1.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-11.1.so (0x00007f39ee2d2000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f39ee085000)
	libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007f39edba3000)
	libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5 (0x00007f39ed974000)
	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f39ed74a000)
	libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f39ed4c6000)
	libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f39ed2bc000)
	libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f39ed043000)
	libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f39ece3d000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f39ecc17000)
	liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f39ec9fb000)
	libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f39ec6df000)
	libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f39ec4c5000)
	libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f39ec24e000)
	libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007f39ec045000)
	libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f39ebe1a000)
	libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f39ebb71000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f39eb956000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f39eb741000)

也可以用以下方法解决
解决方法

vi /etc/ld.so.conf

tree /etc/ld.so.conf.d/
/etc/ld.so.conf.d/
├── fakeroot-x86_64-linux-gnu.conf
├── i386-linux-gnu_GL.conf -> /etc/alternatives/i386-linux-gnu_gl_conf
├── i686-linux-gnu.conf
├── libc.conf
├── x86_64-linux-gnu.conf
├── x86_64-linux-gnu_EGL.conf -> /etc/alternatives/x86_64-linux-gnu_egl_conf
├── x86_64-linux-gnu_GL.conf -> /etc/alternatives/x86_64-linux-gnu_gl_conf
├── zz_i386-biarch-compat.conf
├── zz_x32-biarch-compat.conf
└── zzzzz_ultrasec.conf

0 directories, 10 files
 cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf


添加.so所在路径

/usr/local/lib

退出后执行

ldconfig

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值