因为需要将yuv转换为h264,所以借助于ffmpeg。而编译ffmpeg需要用到 libx264的库
- 编译libx264库
- 编译ffmpeg库
- 测试
编译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
遇到的问题
-
链接libx264库的问题
–extra-libs=-ldl#困了老长时间的一个配置项,如果修改为 -lx264 就不行。
-
将新生成的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库将旧的完全覆盖问题解决。之间还想到自己编译的库有问题,想着重来,可是同样的配置重来一遍真的行吗?