RV1126笔记一:ffmpeg+rtmp

一、介绍

移植FFMPEG主要是为了实现RTMP推流功能、RTMP拉流功能和SRT推流功能,主要分为3个小项目:

1、单路/多路RTMP推流

2、单路/多路RTMP拉流

3、SRT推流

项目主要涉及多个知识点,x264,x265, srt等,RV1126可以直接采用硬件编码方式和解码方式采集H264和H265,我们只需要把数据和音频通过RTMP等协议推出去和拉取显示,操作为内网操作,在本地部署RTMP服务器来接收RTMP的流,外部需要公网等条件,不作介绍。

二、FFMPEG编译

参数说明:

prefix为编译后的库文件路径

cross-prefix:SDK的交叉工具链

其他参数自行了解。

1、编译x264

下载: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

2、编译x265

解压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里。

3、libopenssl编译

网上直接下载源码,编译过程:

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,在重新编译。

 4、编译libsrt

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

5、编译ffmpeg

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博客 

你可能感兴趣的:(笔记,ffmpeg)