背景
直接编译移植的ffmpeg是与 arm-linux 下类似的。
详情参考: arm linux 移植 FFMPEG库 + x264
host平台 :Ubuntu 16.04
gcc :5.4.0
使用以下脚本编译
##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
# File Name: make.sh
# Created : Mon 02 Sep 2019 08:05:53 PM HKT
##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=
OUTPUT_PATH=${BASE}/install
X264_DIR=${OUTPUT_PATH}/x264
make_dirs () {
#为了方便管理,创建有关的目录
cd ${BASE} && mkdir compressed install source -p
}
tget () { #try wget
filename=`basename $1`
echo "Downloading [${filename}]..."
if [ ! -f ${filename} ];then
wget $1
fi
echo "[OK] Downloaded [${filename}] "
}
download_package () {
cd ${BASE}/compressed
tget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20171212-2245.tar.bz2
tget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2
}
tar_package () {
cd ${BASE}/compressed
ls * > /tmp/list.txt
for TAR in `cat /tmp/list.txt`
do
tar -xf $TAR -C ../source
done
rm -rf /tmp/list.txt
}
make_x264() {
cd ${BASE}/source/x264*
./configure \
--enable-shared \
--enable-static \
--enable-pic \
--prefix=${OUTPUT_PATH}/x264 \
--disable-asm
make -j4 && make install
}
make_ffmpeg() {
cd ${BASE}/source/ffmpeg*
./configure \
--target-os=linux \
--prefix=${OUTPUT_PATH}/ffmpeg \
--enable-shared \
--enable-static \
--enable-gpl \
--enable-nonfree \
--enable-ffmpeg \
--disable-ffplay \
--enable-ffserver \
--enable-swscale \
--enable-pthreads \
--disable-armv5te \
--disable-armv6 \
--disable-armv6t2 \
--disable-yasm \
--disable-stripping \
--enable-libx264 \
--extra-cflags=-I${X264_DIR}/include \
--extra-ldflags=-L${X264_DIR}/lib
make clean && make -j4 && make install
}
make_dirs
download_package
tar_package
make_x264
make_ffmpeg
配置完成以后可能会有这个警告,但是不影响后续的结果:
License: nonfree and unredistributable
Creating configuration files ...
WARNING: The --disable-yasm option is only provided for compatibility and will be
removed in the future. Use --enable-x86asm / --disable-x86asm instead.
WARNING: unknown architecture linux
WARNING: using libx264 without pkg-config
此后,就可以使用编译好的库进行开发,也可以根据需要将库拷贝到 /usr/lib目录下
测试:
ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/tmp/test.avi
# video4linux2 代表Linux下
# /dev/video0 代表摄像头设备
# /mnt/tmp/test.avi代表输出路径