ffmpeg交叉编译

重中之重:交叉编译工具链一定一定不要用arm-linux-gcc4.4的那个版本,要用新一点的,我这里用的arm-linux-gcc5.4版本

1.依赖libx264

1)下载libx264源码
2)./configure --enable-static --enable-shared --disable-asm --prefix=/home/chens/work/env/x264/output --host=arm-linux
如果报错:endian test failed,换台电脑或虚拟机,环境的问题,不知道什么原因
3)按下图修改config.mak文件,注意:AR=arm-hisiv300-linux-ar rc rc后面一定要有空格
ffmpeg交叉编译_第1张图片
4)make
如果报错:undefined reference to `clock_gettime’,说明没有链接-lrt,在config.mak的LDFLAGS变量后加上-lrt
5)make install

2.ffmpeg

补充更新2.2部分,一定要看

2.1 编译及第一种解决问题方法

1)上一步编译输出的x264中,在”输出文件/lib/pkgconfig“目录下有x264.pc这个文件,我们把这个文件所在目录即”输出文件/lib/pkgconfig“添加到PKG_CONFIG_PATH环境变量中
2)./configure --prefix=/home/chens/work/thirdlib/ffmpeg/output --enable-cross-compile --cross-prefix=arm-linux-gnueabi- --arch=armv7-a --target-os=linux --enable-gpl --enable-nonfree --extra-cflags="-I/home/chens/work/thirdlib/x264/output/include" --extra-ldflags="-L/home/chens/work/thirdlib/x264/output/lib " --enable-libx264 --extra-libs="-ldl -fpic -shared" --enable-shared --pkg-config-flags=–static
注意–extra-ldflags和–extra-cflags分别跟上面编译的x264的库路径和头文件路径
这一步会报警告,不需要管,直接make
在这里插入图片描述

2)make编译,
注意如果使用的工具量为4.4版本,那么会报一个找不到gethrtime函数的错误,所以必须要用高版本的工具链
在这里插入图片描述
除了这个错误,还会报下面这个错误,未定义closesocket,解决办法为在libavutil/timer.h中手动定义 #define closesocket(fd) close(fd)
在这里插入图片描述

2.2 编译2及解决方法

上面2.1说到是gcc版本不够高导致找不到gethrtime问题,这是没错的,但是我用高版本交叉编译工具链编译以后,拿到板子上跑不了,因为板子上的gcc版本并没有这么高,所以2.1的方式并没有解决问题。

因为ffmpeg是模块化编译,所以尝试屏蔽一些模块编译,看能不能避免掉使用gethrtime函数的那部分代码,结果是可以的,如下:–disable-everthing参数屏蔽了所有协议和编解码模块,然后在后面enable你实际需要的模块即可,其中有个坑,刚开始没有使能file协议,导致avformat_open_input函数打开文件一直报错,所以要加上–enable-protocol=file,其他的模块根据实际场景添加,程序运行的错误要第一时间联系到编译的时候是不是没有开启相关功能模块
有的模块使能以后,编译程序的时候会报”undefined reference to `__sync_fetch_and_add_8’“的错误,这也是gcc版本问题,那就不要使用有问题的这个模块
1)./configure --prefix=/home/chens/thunder/lib/ffmpeg/armoutput --cpu=cortex-a9 --cross-prefix=arm-hisiv200-linux-gnueabi- --cc=arm-hisiv200-linux-gnueabi-gcc --as=arm-hisiv200-linux-gnueabi-gcc --host-cc=arm-hisiv200-linux-gnueabi-gcc --enable-cross-compile --enable-static --disable-optimizations --disable-mmx --disable-altivec --enable-ffplay --arch=arm --target-path=output --target-os=linux --disable-shared --enable-static --disable-avfilter --enable-small --enable-network --disable-encoders --disable-decoders --disable-everything --enable-decoder=mpeg4 --disable-decoder=mjpeg --disable-muxer=rtsp --enable-muxer=mpegts --enable-demuxer=mpegts --enable-demuxer=rtsp --enable-decoder=h264 --enable-encoder=h264 --enable-avresample --enable-decoder=aac --enable-decoder=mp3 --enable-gpl --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-thumb --enable-lto --enable-asm --enable-inline-asm --enable-vfp --enable-fast-unaligned --enable-optimizations --enable-pic --enable-libx264 --extra-cflags="-I/home/chens/thunder/lib/x264/armoutput/include" --extra-ldflags="-L/home/chens/thunder/lib/x264/armoutput/lib" --enable-protocol=file
先关闭所有编解码器,然后在单独打开所需要的编解码器,这个配置打开了h264,aac,MP3,mpeg4等解码器

3 附录

ffmpeg configure参数配置见:https://blog.csdn.net/fengsh998/article/details/79443503
使用下面这些configure命令可以查看所有支持的编解码器,协议等,根据实际场景决定需要那些模块
ffmpeg交叉编译_第2张图片

你可能感兴趣的:(音视频,ffmpeg)