logo01.png

  这段时间都在折腾FFmpeg 视频硬解码,不得不说,在ARM下完成音视频硬解码已经很有挑战了,而我却选择的一条更难的路——基于Linux-Qt 平台,完成FFmpeg的硬解码...没办法,GUI交互框架只会个Qt,安卓不会,只能硬着头皮啃...

FFmpeg的视频解码程序在Windows下已经实现,要在Linux开发板上实现播放,所以要移植到ARM平台。由于架构的不同,在ARM下需要对源码进行交叉编译,API才能被调用。本文章就记录针对RK3399平台的FFmpeg的交叉编译。


交叉编译x264

下载x264源码,并交叉编译

git clone https://github.com/mirror/x264.git
cd x264
mkdir build
./configure --prefix=/home/forlinx/x264/build \  #build文件夹存放库
 --enable-shared \
 --enable-static \
 --host=arm-linux \
 --cross-prefix=/home/forlinx/OK3399-linux/OK3399-linux-release/host/bin/aarch64-buildroot-linux-gnu- \  #RK3399编译器路径,非ubuntu 自带编译器
 --disable-opencl \
 --enable-pic \
 --disable-asm

make -j4
make install

编译成功截图:
x264_succ.png


交叉编译FFmpeg

这里,下载ffmpeg-3.4.5.tar.gz 源码,传到ubuntu中

tar  xvf ffmpeg-3.4.5.tar.gz
cd ffmpeg-3.4.5/
mkdir build   #新建编译文件夹

./configure \
--prefix=/home/forlinx/ffmpeg/ffmpeg-3.4.5/build \
--enable-cross-compile \
--cross-prefix=/home/forlinx/OK3399-linux/OK3399-linux-release/host/bin/aarch64-buildroot-linux-gnu- \
--enable-filters   \
--disable-asm \
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
--enable-doc \
--arch=aarch64 \
--target-os=linux \
--host-os=linux \
--enable-gpl \
--enable-version3 \
--enable-small \
--enable-static \
--enable-shared \
--enable-encoder=rawvideo \
--enable-encoder=mpeg2video \
--enable-encoder=mp2 \
--enable-encoder=libx264 \
--enable-libx264 \
--enable-muxer=adts \
--enable-muxer=mpegts \
--enable-muxer=mpeg2video \
--enable-muxer=rtsp \
--enable-muxer=hls \
--enable-muxer=h264 \
--enable-muxer=rtp \
--enable-muxer=avi \
--enable-muxer=flv \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--enable-demuxer=rtsp \
--enable-demuxer=hls \
--enable-demuxer=h264 \
--enable-demuxer=rtp \
--enable-demuxer=flv \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--enable-demuxer=rtsp \
--enable-demuxer=hls \
--enable-demuxer=h264 \
--enable-demuxer=rtp \
--enable-demuxer=flv \
--enable-demuxer=avi \
--enable-demuxer=mpegps \
--enable-demuxer=mpegtsraw \
--enable-demuxer=mpegvideo \
--enable-parser=aac \
--enable-parser=h264 \
--enable-parser=mpeg4video \
--enable-parser=mpegvideo \
--enable-parser=mpegaudio \
--enable-bsf=h264_mp4toannexb \
--enable-protocol=http \
--enable-protocol=rtp \
--enable-protocol=hls \
--enable-protocol=file \
--enable-protocol=data \
--enable-gray  \
--enable-safe-bitstream-reader \
--enable-swscale \
--enable-swscale-alpha \
--enable-filter=scale \
--extra-cflags="-I/home/forlinx/x264/x264-master/build/include" \   #指定x264 include路径
--extra-ldflags="-L/home/forlinx/x264/x264-master/build/lib"  #指定x264 lib 路径

make -j4
make install

编译成功截图:

ffmpeg_succ.png


至此,ffmpeg-3.4.5的交叉编译就完成了,将生成的lib库,复制到Qt程序目录下,即可在Qt程序中调用FFmpeg相关API。



注意:由于目前我只用到H.264的摄像头,且不需要带音频,所以我只针对了x264进行了交叉编译,并未编译音频解码模块;若需要H.265和音频,则需要将对应的解码库先交叉编译,再编译FFmpeg,关于这块的方法,可以参考本博客全志A40 FFmpeg交叉编译的文章

全志A40 交叉编译AAC/x264/FFmpeg 笔记

最后修改:2020 年 11 月 10 日
您的支持就是我持续更新的动力!