Bootstrap

Linux:移植ffmpeg到ARM板(含x264编译步骤)

1、ffmpeg简介

ffmpeg(Fast Forward Mpeg)的介绍可以参考[ffmpeg - 百度百科],里面有比较全面以及专业的描述,主要功能大约可以总结为以下几点:

  • 视频采集/屏幕录制
  • 视频格式转换
  • 视频截图
  • 视频加水印等

2、编译

ffmpeg中已有H.264的解码,但没有编码,所以需要先编译libx264,它是自由的H.264编码库,是x264项目的一部分。

2.1 编译x264

源码下载:http://download.videolan.org/pub/videolan/x264/snapshots/

编译步骤:

tar xjvf x264-snapshot-20180619-2245-stable.tar.bz2
cd x264-snapshot-20180619-2245-stable/
./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp --enable-shared --disable-asm
vi config.mak 	# 修改内容以支持交叉编译
	CC=arm-linux-gnueabihf-gcc
	LD=arm-linux-gnueabihf-gcc -o
	AR=arm-linux-gnueabihf-gcc-ar rc
	RANLIB=arm-linux-gnueabihf-gcc-ranlib
	STRIP=arm-linux-gnueabihf-strip
make && make install
tree tmp/ 	 # 生成了bin/include/lib三个文件夹及其内容
	tmp/
	├── bin
	│   └── x264
	├── include
	│   ├── x264_config.h
	│   └── x264.h
	└── lib
	    ├── libx264.so -> libx264.so.152
	    ├── libx264.so.152
	    └── pkgconfig
	        └── x264.pc
2.2 编译ffmpeg

源码下载:http://ffmpeg.org/releases/

编译步骤:

tar xjvf ffmpeg-3.4.5.tar.bz2
cd ffmpeg-3.4.5/
./configure --enable-cross-compile --cross-prefix=arm-linux-gnueabihf- \
	--arch=arm --target-os=linux --cc=arm-linux-gnueabihf-gcc --prefix=$PWD/tmp \
	--enable-shared --enable-pic --disable-static --enable-gpl --enable-nonfree \
	--enable-pthreads --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale  \
	--disable-armv5te --disable-armv6 --disable-armv6t2 --disable-stripping \
	--enable-libx264 --extra-cflags=-I$PWD/../x264-snapshot-20180619-2245-stable/tmp/include \
	--extra-ldflags=-L$PWD/../x264-snapshot-20180619-2245-stable/tmp/lib
make && make install
ls -l tmp/    # 生成了bin/include/lib/share四个文件夹及其内容

./configure参数说明可以参考:https://www.cnblogs.com/azraelly/archive/2012/12/31/2840541.html

注:./configure时提示“arm-linux-xxx-pkg-config not found”不影响后续使用。

3、使用示例

本例使用了USB摄像头作为测试,支持640x480、320x240多种分辨率,在系统中的节点为/dev/video0,则使用320x240分辨率的测试命令如下:

ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/test.avi

参考文章

;