移植FFMPEG主要是为了实现RTMP推流功能、RTMP拉流功能和SRT推流功能,主要分为3个小项目:
1、单路/多路RTMP推流
2、单路/多路RTMP拉流
3、SRT推流
项目主要涉及多个知识点,x264,x265, srt等,RV1126可以直接采用硬件编码方式和解码方式采集H264和H265,我们只需要把数据和音频通过RTMP等协议推出去和拉取显示,操作为内网操作,在本地部署RTMP服务器来接收RTMP的流,外部需要公网等条件,不作介绍。
参数说明:
prefix为编译后的库文件路径
cross-prefix:SDK的交叉工具链
其他参数自行了解。
下载:git clone https://github.com/mirror/x264.git
编译:
./configure --prefix=/opt/arm_libx264 --host=arm-linux --cross-prefix=/home/leona/rv1126/buildroot/output/alientek_rv1126/host/bin/arm-linux-gnueabihf- --enable-shared --enable-static
make
sudo make install
解压libx265.tar.gz压缩包
wget https://johnvansickle.com/ffmpeg/release-source/libx265-git.tar.xz
xz -d libx265-git.tar.xz
tar -xvf libx265-git.tar
cd libx265-git/source/
修改CMakeList.txt文件:vim currrnt_dir/libx265-git/source/CMakeLists.txt
在文件头部添加以下信息:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER /home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER /home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)
set(CMAKE_SHARED_LINKER_FLAGS "-ldl")
#set(CMAKE_CXX_FLAGS -ldl)
add_compile_options(-fPIC)
mkdir currrnt_dir/libx265-git/source/build
cd currrnt_dir/libx265-git/source/build
cmake -DCMAKE_INSTALL_PREFIX=/opt/arm_libx265_install -DCMAKE_SHARED_LINKER_FLAGS="-ldl ${CMAKE_SHARED_LINKER_FLAGS}" ..
make
sudo make install
编译后的库在 /opt/arm_libx265_install里。
网上直接下载源码,编译过程:
export CC=/home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
./config no-asm -shared --prefix=/opt/arm_openssl
上网搜了一下,ubuntu其实自带libopenssl。
Old 1.1.1 Releases | OpenSSL Library (openssl-library.org)
重新执行 ./config no-asm -shared --prefix=/opt/arm_openssl
make
sudo make install
出错: arm-linux-gnueabihf-gcc: error: unrecognized command line option '-m64 ”-m64“错误,原因是虚拟机是64位,要编译的是32位。
处理: 进入makefile,删除文件里所有-m64,在重新编译。
git clone https://github.com/Haivision/srt.git
cd srt/
需要openssl库
cp -r /opt/arm_openssl/lib/* /home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/8.3.0
打开Openssl的include目录,把openssl目录拷贝到srt/haicrypt目录下
./configure --prefix=/opt/arm_libsrt --openssl-include-dir=/opt/arm_openssl/include --openssl-ssl-library=/opt/arm_openssl/lib --with-compiler-prefix=/home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
make
sudo make install
sdk自带源码,在buildroot/dl目录下
export PKG_CONFIG_PATH=/opt/arm_libx264/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/opt/arm_libsrt/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/opt/arm_libx265_install/lib/pkgconfig:$PKG_CONFIG_PATH
xz -d ffmpeg-4.1.3.tar.xz
tar -xvf ffmpeg-4.1.3.tar
cd ffmpeg-4.1.3/
配置,带x264,x265,srt的ffmpeg
./configure --prefix=/opt/arm32_ffmpeg_x264_x265_srt --cross-prefix=/home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=/home/leona/rv1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-ffmpeg --extra-cflags=-I/opt/arm_libsrt/include --extra-cflags=-I/opt/arm_libx264/include --extra-cflags=-I/opt/arm_libx265_install/include --extra-ldflags=-L/opt/arm_libx264/lib --extra-ldflags=-L/opt/arm_libx265_install/lib --extra-ldflags=-L/opt/arm_libsrt/lib --enable-libx264 --enable-libx265 --enable-libsrt --enable-gpl --pkg-config="pkg-config --static"
编译支持srt的ffmpeg提示ERROR: srt >= 1.3.0 not found using pkg-config_error: srt >= 1.3.0 not found using pkg-config-CSDN博客
参考:RV1126笔记八:FFMPEG交叉编译_rv1126交叉编译工具-CSDN博客