平台:海思3516EV200
编译链:arm-himix100-gcc
FFMPEG各个版本:
FFMPEG_4.0.5
链接:https://pan.baidu.com/s/1UWfdtwrTHIwkVYLRSiU1uQ
提取码:w16z
FFMPEG_3.4.7
链接:https://pan.baidu.com/s/1KNbl-5mIBADB3ILbwQ0vLA
提取码:mgzy
FFMPEG_3.2.14
链接:https://pan.baidu.com/s/1_ENhYPDFeTiogrW7ZT1ytQ 提取码:fit8
FFMPEG_2.8.15
链接:https://pan.baidu.com/s/12cXrYIJtMbCdkQxAbv8rhg 提取码:31nc
以上是各个大版本的FFMPEG库的源码包。(arm-himix100-gcc链编译4.0以上版本都会提示一个错误)
经过多次测试之后发现,编译4.0以上的FFMPEG版本,会出现以下问题。
libavfilter/libavfilter.so: undefined reference to fminf
libavfilter/libavfilter.so: undefined reference to `fmaxf'
(多次操作和各种添加函数,连接库等等操作,都没办法搞。 有搞完的大神可以分享一下心得)
说明:
在编译FFMPEG之前我们需要安装以下一个库,这个库是X264,这个库里面包含了FFMPEG生成具体的库的插件,要是不需要这个功能的话,可以不下载加载这个库, 但是在FFMPEG的配置文件里面需要禁止使能这个功能,不然会提示找不到库,编译不通过。
具体步骤:
一、编译生成X264库
二、编译生成FFMPEG库
三、移植到海思开发板上面
一、编译生成X264库
①下载X265库:
链接:https://pan.baidu.com/s/1yQIK7nvDxXSRaDd4RVvSPg
提取码:7kkn
②、在linux下面解压
tar -xfvf x265_xxx.tar.bz2
③、编译里面的配置文件
CC=arm-himix100-linux-gcc ./configure \ --host=arm-himix100-linux
–prefix=/home/x264-snapshot-20161225-2245/build_hisix100
–cross-prefix=arm-himix100-linux- \
–enable-static
–enable-shared \
/说明
–prefix :是指定安装的目录,就是编译之后的库文件就会在这个目录,
–enable-static :是生成静态库的选项
建议写一个shell脚本,将上面的配置参数写进去,要注意的是交叉编译链的差异,海思不同平台的交叉编译平台的链不一样,按个人来********/
执行这个脚本之后最后面打印以下语句,证明应已经配置成功了。
WARNING: The --enable-yasm option is only provided for compatibility
and will beremoved in the future. Use --enable-x86asm /
–disable-x86asm instead.WARNING: arm-himix100-linux-pkg-config not found, library detection
may fail.WARNING: using libx264 without pkg-config
④编译X264库
make clean
make && make install
查看–prefix参数目录,看看里面是否存在对应的头文件和bin文件,和库文件。至此已经完成。
二、编译FFMPEG库
①、在上面选择一个版本的FFMPEG文件包,下载,解压
②、配置FFMPEG参数
./configure \
--prefix=./build_hisix100 \
--enable-yasm \
--enable-ffplay \
--enable-ffprobe \
--enable-debug \
--disable-avdevice \
--enable-encoders \
--enable-ffmpeg \
--enable-static \
--enable-gpl \
--enable-small \
--target-os=linux \
--arch=arm \
--enable-nonfree \
--enable-cross-compile \
--enable-encoder=libx264 \
--enable-libx264 \
--cross-prefix=arm-himix100-linux- \
--extra-cflags=-I/home/x264-snapshot-20161225-2245/build_hisix100/include \
--extra-ldflags=-L/home/x264-snapshot-20161225-2245/build_hisix100/lib \
--enable-shared \
--cc=arm-himix100-linux-gcc \
*************************
要注意以下参数:
--prefix : 编译安装之后FFMPEG库存放的目录
--enable-static : 选择编译出来静态库(这个静态库很大,看自己需要是否编译出来)
--cross-prefix :具体的交叉编译链
--extra-cflags=-I :在上面刚编译出来的X264的头文件位置,要指定一下
--extra-ldflags=-L :在上面刚编译出来的X264的库位置,要指定一下
③、编译生成对应的FFMPEG库
make clean
make && make install
在–prefix 参数指定的目录,查看一下是否存在以下目录,即编译成功。
include lib bin
三、移植到海思开发板上面
在移植之前可以声明一下,当编写应用时应用到FFMPEG库,可以在Makefile连接静态库和动态库。具体区别自行百度。以下是移动动态库的移植。
首先将上面编译出来的lib里面文件,移动到海思开发板的/usr/lib里面
将bin目录里面两个可执行程序文件,创建/opt/ffmpeg目录并存放到海思开发板的/opt/ffmpeg。
然后修改一下环境自动关联到这个两个文件。
vi /etc/profile
export PATH="/opt/ffmpeg/:$PATH"
然后重新启动海思开发板,在根目录指定
ffmpeg -help
有对应的信息打印出来,即是移植成功,在海思开发板里面也可以使用的FFMPEG命令操作。
遇到的错误:
①、当执行FFMPEG命令时候,出现这个问题。
bus error
要更新交叉编译器的C++库, 到海思开发板的/lib
(完)