交叉编译 ffmpeg 包含 h264编码器

因为需要将yuv转换为h264,所以借助于ffmpeg。而编译ffmpeg需要用到 libx264的库

  1. 编译libx264库
  2. 编译ffmpeg库
  3. 测试

编译libx264库

下载页面访问网页时会出现安全警告,忽视后继续访问。下载 x264-snapshot-20180101-2245-stable

$ wget https://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20180101-2245-stable.tar.bz2 --no-check-certificate
$ tar jxvf x264-snapshot-20180101-2245-stable.tar.bz2
$cd x264-snapshot-20180101-2245-stable
$make  _build
$./configure --cross-prefix=arm-buildroot-linux-gnueabihf- \
    --sysroot=/SDK_DIR/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot \
    --host=arm-buildroot-linux-gnueabihf \
    --prefix=`pwd`/_build --enable-shared
$ make -j4
$ make install
$tree  _build
.
├── bin
│   └── x264
├── include
│   ├── x264_config.h
│   └── x264.h
└── lib
    ├── libx264.so -> libx264.so.152
    ├── libx264.so.152
    └── pkgconfig
        └── x264.pc

4 directories, 6 files

编译ffmpeg

ffmpeg 的版本为3.2.3,没有下载地址,因为这个是SDK中提供的。

$ make  _build
$ ./configure  \
    --prefix=`pwd`/_build \
 --enable-cross-compile  \
 --cross-prefix=/SDK_DIR/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf- \
 --sysroot=/SDK_DIR/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot \
 --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping \
 --pkg-config=/SDK_DIR/buildroot-2017.02.3/output/host/usr/bin/pkg-config \
 --disable-static --enable-shared --enable-avfilter \
 --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice \
 --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small \
 --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect \
 --disable-hardcoded-tables --disable-memalign-hack --disable-mipsdsp --disable-mipsdspr2 --disable-msa \
 --enable-hwaccels --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libcdio \
 --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libnut --disable-libopenjpeg --disable-libschroedinger \
 --disable-libvo-amrwbenc --disable-symver --disable-doc --enable-gpl --disable-nonfree --enable-ffmpeg --enable-ffplay \
 --enable-ffserver --disable-avresample --enable-ffprobe --disable-postproc --enable-swscale --enable-indevs  --enable-outdevs \
 --enable-pthreads --enable-zlib --enable-bzlib --disable-libfdk-aac --disable-gnutls --disable-openssl --disable-libopenh264 \
 --disable-vaapi --disable-vdpau --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray \
 --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack \
 --enable-libfreetype --enable-fontconfig --disable-libx265 --disable-yasm --disable-mmx --disable-sse \
 --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --enable-armv6  \
 --enable-vfp --enable-neon --disable-altivec --enable-pic --cpu=cortex-a9 \
 --enable-libx264 \
 --extra-cflags=-I/x264-snapshot-20180101-2245-stable/_build/include/ \
 --extra-ldflags=-L/x264-snapshot-20180101-2245-stable/_build/lib/ \
 --extra-libs=-ldl#困了老长时间的一个配置项,如果修改为 -lx264 就不行。

为什么这么多的配置选项,我也不知道,因为SDK之前有配置好的ffmpeg,不过没有集成x264,所以需要重新配置。可以通过 ffmpeg 即可得到配置项。

$ ./ffmpeg
ffmpeg version 3.2.3 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Buildroot 2017.02.3)
  configuration: --prefix=/SDK_DIR/buildroot-2017.02.3/output/build/ffmpeg-3.2.3/_build --enable-cross-compile --cross-prefix=/SDK_DIR/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf- --sysroot=/SDK_DIR/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping --pkg-config=/SDK_DIR/buildroot-2017.02.3/output/host/usr/bin/pkg-config --disable-static --enable-shared --enable-avfilter --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect --disable-hardcoded-tables --disable-memalign-hack --disable-mipsdsp --disable-mipsdspr2 --disable-msa --enable-hwaccels --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libcdio --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libnut --disable-libopenjpeg --disable-libschroedinger --disable-libvo-amrwbenc --disable-symver --disable-doc --enable-gpl --disable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --disable-avresample --enable-ffprobe --disable-postproc --enable-swscale --enable-indevs --enable-outdevs --enable-pthreads --enable-zlib --enable-bzlib --disable-libfdk-aac --disable-gnutls --disable-openssl --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack --enable-libfreetype --enable-fontconfig --disable-libx265 --disable-yasm --disable-mmx --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --enable-armv6 --enable-vfp --enable-neon --disable-altivec --enable-pic --cpu=cortex-a9 --enable-libx264 --extra-cflags=-I/x264-snapshot-20180101-2245-stable/_build/include/ --extra-ldflags=-L/x264-snapshot-20180101-2245-stable/_build/lib/ --extra-libs=-ldl
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

然后 ./configure执行大概1分多钟,才有内容的输出。

然后 make && make install

遇到的问题

  1. 链接libx264库的问题

    –extra-libs=-ldl#困了老长时间的一个配置项,如果修改为 -lx264 就不行。

  2. 将新生成的lib库拷贝到板子的一个目录,当执行测试指令:/ffmpeg -s 640*480 -pix_fmt yuv420p -i /mnt/frame1.yuv -vcodec h264 bus_ci2.mp4,悲剧就发生来。出现来好多的输出信息,发现有一个警告

    WARNING: library configuration mismatch

    搜索得知,库配置不正确,建议将旧的库删除。

    接着回想到 板子上本来有一份ffmpeg的库,在 /usr/lib 目录下面。后续使用新的ffmpeg库将旧的完全覆盖问题解决。

    之间还想到自己编译的库有问题,想着重来,可是同样的配置重来一遍真的行吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值