在Debian Jessie上为树莓派Zero编译带OMX/MMAL的FFmpeg遇MMAL未找到问题
解决树莓派Zero Debian Jessie下FFmpeg编译MMAL支持的问题
嗨,我刚看完你的问题,只复制MMAL头文件肯定不够啦——MMAL的支持需要对应的库文件配合,咱们一步步来搞定:
1. 先把基础依赖补全
首先得装齐编译FFmpeg和MMAL需要的基础包,打开终端跑这条命令:
sudo apt-get update sudo apt-get install build-essential git pkg-config libssl-dev libx264-dev libx265-dev libfdk-aac-dev libmp3lame-dev libopus-dev
这些包是编译FFmpeg的刚需,先确保都装到位。
2. 正确编译安装Raspberry Pi Userland
你之前直接复制头文件的方式不对,得完整编译整个userland项目,它会自动把MMAL的头文件和库文件放到系统正确的位置:
- 先克隆Raspberry Pi官方的userland仓库(如果已经克隆过,直接进入目录就行):
git clone https://github.com/raspberrypi/userland.git cd userland
- 树莓派Zero是ARMv6架构,编译的时候要指定参数,跑这条命令:
sudo ./buildme --aarch32
这个命令会自动编译并把MMAL相关的头文件放到/opt/vc/include,库文件放到/opt/vc/lib,比手动复制靠谱多了。
3. 给FFmpeg配置脚本指路
编译完userland后,FFmpeg的configure脚本默认找不到/opt/vc下的文件,咱们得用环境变量告诉它:
export CFLAGS="-I/opt/vc/include" export LDFLAGS="-L/opt/vc/lib" export LD_LIBRARY_PATH="/opt/vc/lib"
这三个变量分别告诉编译器头文件在哪、库文件在哪,以及运行时该去哪找库。
4. 重新运行FFmpeg的配置命令
现在再执行你的configure命令,这次应该能识别到MMAL了:
./configure --enable-gpl --enable-nonfree --enable-mmal --enable-omx --enable-omx-rpi
要是还报错,你可以检查下/opt/vc/include里有没有mmal文件夹,/opt/vc/lib里有没有libmmal.so、libmmal_core.so这些库文件,确认userland编译没出错。
5. 编译安装FFmpeg
配置成功后就可以编译了,注意树莓派Zero只有1核,别加-j参数,直接跑:
make sudo make install
Zero性能弱,编译时间会很长,耐心等它跑完就行~
额外提醒
- Debian Jessie版本比较老,要是遇到编译报错,可以试试升级下基础库,或者检查userland编译过程中有没有报错信息。
- 也可以更新下树莓派固件,MMAL的支持有时候和固件版本有关,你可以用
rpi-update更新(Debian下可能需要先安装这个工具)。
内容的提问来源于stack exchange,提问作者CWright




