ref:
背景:
ffmpeg 中带有264的解码,没有编码,需要添加x264。libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264。
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
librtmp用来接收、发布RTMP协议格式的数据。FFmpeg支持RTMP协议,将librtmp编译进去后支持协议RTMPE、RMTPTE、RTMPS。这里我直接使用FFmpeg自带的RTMP功能。
主机准备:
为了方便管理,创建有关的目录
mkdir ffmpeg
cd ffmpeg
mkdir compressed install source
下载并解压有关的源码:
cd compressed
wget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20171212-2245.tar.bz2
wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2
tar -C ../source -xf ffmpeg-3.4.1.tar.bz2
tar -C ../source -xf x264-snapshot-20171212-2245.tar.bz2
编译x264
cd ../source/x264-snapshot-20171212-2245
使用以下脚本
## # mk_x264.sh # SCHIPS # schips@dingtalk.com # https://gitee.com/schips/ # Mon 02 Sep 2019 07:15:41 PM HKT ## #!/bin/sh OUTPUT=/home/schips/arm/ffmpeg/install/x264 MYGCC=arm-none-linux-gnueabi mkdir -p $OUTPUT && rm $OUTPUT/* -rf CC=$MYGCC-gcc \ ./configure \ --host=$MYGCC \ --enable-shared \ --enable-static \ --enable-pic \ --prefix=$OUTPUT \ --cross-prefix=$MYGCC- \ --disable-asm make && make install exit 0
移植FFMPEG
cd ../ffmpeg3.4.1
编写以下脚本
## # mk_ffmpeg3.4.1.sh # SCHIPS # schips@dingtalk.com # https://gitee.com/schips/ # Mon 02 Sep 2019 08:05:53 PM HKT ## #!/bin/sh OUTPUT=/home/schips/arm/ffmpeg/install/ffmpeg X264_DIR=/home/schips/arm/ffmpeg/install/x264/ MYCC=arm-none-linux-gnueabi mkdir $OUTPUT -p && rm $OUTPUT/* -rf ./configure \ --cross-prefix=$MYCC- \ --enable-cross-compile \ --target-os=linux \ --cc=$MYCC-gcc \ --arch=arm \ --prefix=$OUTPUT \ --enable-shared \ --enable-static \ --enable-gpl \ --enable-nonfree \ --enable-ffmpeg \ --disable-ffplay \ --enable-ffserver \ --enable-swscale \ --enable-pthreads \ --disable-armv5te \ --disable-armv6 \ --disable-armv6t2 \ --disable-yasm \ --disable-stripping \ --enable-libx264 \ --extra-cflags=-I$X264_DIR/include \ --extra-ldflags=-L$X264_DIR/lib make clean && make && make install exit 0
配置完成以后可能会有这个警告,但是不影响后续的结果
开发板准备:
拷贝 x264中的make install 以后生成的lib下的所有文件到板子上的/usr/lib 中
同样地,拷贝ffmpeg中的lib到板子上
测试:
ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/tmp/test.avi
video4linux2 代表Linux下
/dev/video0代表摄像头设备
/mnt/tmp/test.avi代表输出路径