以下方式在树莓派4b下编译,尽可能的开启了给各种优化,同样使用于不同的操作系统平台。
1、ffmpeg开发环境
完整目标库含有 avcodec、avdevice、avfilter、avformat、avutil、postproc、swresample 和swscale。
1.1、源码编译
使用源码编译,可以根据自身情况选择编译需要的模块,控制库的大小。
下面以通用方式说明,开启树莓派硬硬件加速功能。
(1)环境准备
build-essential、cmake、git、pkg-config 不用解释。
如果使用 H264 编码,需要安装libx264库,可以直接使用 apt-get install libx264-dev
或者从源代码编译。
使用264_omx硬编码器时,树莓派镜像已经提供了运行依赖库,但是开发环境需要的头文件,使用命令 sudo apt-get install libomxil-bellagio-dev
即可。
其他的依赖库,例如某些音频、视频依赖库可以在后续的 configure 过程提示中解决,
(2)编译源码
首先下载源码
wget http://ffmpeg.org/releases/ffmpeg-4.1.2.tar.bz2
tar jxvf ffmpeg-4.1.2.tar.bz2
cd ffmpeg-4.1.2
之后,准备编译脚本 build_ffmpeg.sh
内容如下
#!/bin/sh
PREFIX=/usr/local
./configure \
--enable-gpl --enable-nonfree --enable-static --enable-shared \
\
--prefix=$PREFIX \
\
--disable-opencl --disable-thumb --disable-pic --disable-stripping \
\
--enable-small \
\
--enable-ffmpeg --enable-ffplay --enable-ffprobe \
\
--disable-doc \
--disable-htmlpages \
--disable-podpages \
--disable-txtpages \
--disable-manpages \
\
--disable-everything \
\
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-encoder=ac3 \
--enable-decoder=ac3 \
--enable-encoder=rawvideo \
--enable-decoder=rawvideo \
--enable-encoder=mjpeg \
--enable-decoder=mjpeg \
\
--enable-demuxer=concat \
--enable-muxer=flv \
--enable-demuxer=flv \
--enable-demuxer=live_flv \
--enable-muxer=hls \
--enable-muxer=segment \
--enable-muxer=stream_segment \
--enable-muxer=mov \
--enable-demuxer=mov \
--enable-muxer=mp4 \
--enable-muxer=mpegts \
--enable-demuxer=mpegts \
--enable-demuxer=mpegvideo \
--enable-muxer=matroska \
--enable-demuxer=matroska \
--enable-muxer=wav \
--enable-demuxer=wav \
--enable-muxer=pcm* \
--enable-demuxer=pcm* \
--enable-muxer=rawvideo \
--enable-demuxer=rawvideo \
--enable-muxer=rtsp \
--enable-demuxer=rtsp \
--enable-muxer=rtsp \
--enable-demuxer=sdp \
--enable-muxer=fifo \
--enable-muxer=tee \
\
--enable-parser=h264 \
--enable-parser=aac \
\
--enable-protocol=file \
--enable-protocol=tcp \
--enable-protocol=rtmp \
--enable-protocol=cache \
--enable-protocol=pipe \
--enable-protocol=srtp \
\
--enable-filter=aresample \
--enable-filter=allyuv \
--enable-filter=scale \
--enable-libfreetype \
\
--enable-indev=v4l2 \
--enable-indev=alsa \
\
--enable-omx \
--enable-omx-rpi \
--enable-encoder=h264_omx \
\
--enable-mmal \
--enable-hwaccel=h264_mmal \
--enable-decoder=h264_mmal \
\
修改当前脚本权限 chmod a+x build_ffmpeg.sh
,
之后执行 make
,成功后 make install
即可。
演示略。
1.2、命令行安装
(1) 直接安装 ffmpeg
我们现在使用的不带桌面程序的操作系统,不需要使用类似gtk庞大的X11库。
当直接使用 sudo apt-get install ffmpeg
时, 可以 安装 ffmpeg、ffprobe和 ffplay等工具,同时会安装ffmpeg相关所有的静态库、动态库。
但是,该方式安装的 ffmpeg是带有gui功能,且占用700M的空间, 安装了不必要的X11库。
(2)仅安装开发库 (!!!推荐!!!)
不使用命令行安装ffmpeg,而是仅安装需要的开发库
sudo apt-get install libavcodec-dev
sudo apt-get install libavdevice-dev
sudo apt-get install libavfilter-dev
sudo apt-get install libavformat-dev
sudo apt-get install libavutil-dev
sudo apt-get install libswresample-dev
sudo apt-get install libswscale-dev
若有需要,还能安装 libavresample库。相关库大小不到20M。
另外,如果需要ffmpeg工具,直接下载静态编译编译好的可执行文件即可,下载链接 https://johnvansickle.com/ffmpeg/
根据情况选择,下载后放入 /usr/bin
目录并给权限。
可见,下载的ffmpeg工具不支持树莓派硬件加速,仅适用于文件分析,不适合编解码操作。
2、opencv开发环境
opencv从源代码编译,服务端使用,同样不需要gui功能。
同样,需要依赖环境,基本环境略, 如果涉及到图片保存,需要安装相关的库
,还有优化的一些函数包
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng12-dev
sudo apt-get install libatlas-base-dev gfortran
首先下载opencv源码
wget -O opencv-4.5.1.zip https://github.com/Itseez/opencv/archive/4.5.1.zip
unzip opencv-4.5.1.zip
若需要使用contrib包,则下载对应版本文件
wget -O opencv_contrib-4.5.1.zip https://github.com/Itseez/opencv_contrib/archive/4.5.1.zip
编译脚本:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
# 优化选项
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
# 编译contrib包
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.5.1/modules \
# 不编译 highgui 模块
-D BUILD_opencv_highgui=OFF
# 不编译测试的项目
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_CXX_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..
注意脚本中的注释说明:
- 1、优化选项, 必须开启
- 2、根据实际情况,编译contrib包
- 3、指定模块(包含contrib中的包)不编译
- 4、不编译example,提高编译速度
在build目录下执行上面脚本,成功后 make -j4
,树莓派4核同时编译,提高速度。编译后 make install
就可以直接使用了。
这里给出不编译contrib得到的opencv动态库文件极小,大小共22M左右,如下图: