安装nasm汇编器 apt install nasm
x264
下载:x264, the best H.264/AVC encoder - VideoLAN
# git clone https://code.videolan.org/videolan/x264.git
# ./configure --enable-static --enable-shared --enable-pic --prefix=/code/tool/x264/install
# make
# make install
x265
下载:x265, the free H.265/HEVC encoder - VideoLAN
# 依赖ccmake
# sudo apt install cmake cmake-curses-gui
# git clone https://bitbucket.org/multicoreware/x265_git.git
# cd x265_git/build/linux
# ./make-Makefiles.bash
# 编辑安装路径后,按下c g会自动生成MakeFile
# make
# make install
编辑安装路径,其他不变
aac
# git clone https://github.com/mstorsjo/fdk-aac.git
# cd fdk-aac
# ./autogen.sh
# ./configure --prefix=/code/tool/fdk-aac/install --enable-shared --enable-static
# make
# make install
ffmpeg
# apt install libspeex-dev
# wget https://ffmpeg.org/releases/ffmpeg-6.1.tar.xz
# tar -xvf ffmpeg-6.1.tar.xz
# 将x264 x265 aac安装路径(install)拷贝到/code/tool/ffmpeg-6.1/下并重命名为third_lib,并导入PKG_CONFIG_PATH,自动查找对应的库
# export PKG_CONFIG_PATH=/code/tool/ffmpeg-6.1/third_lib/lib/pkgconfig/
# ./configure --prefix=/code/tool/ffmpeg-6.1/install --enable-vaapi --enable-libdrm --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --extra-cflags=-I/code/tool/ffmpeg-6.1/third_lib/include/ --extra-ldflags=-L/code/tool/ffmpeg-6.1/third_lib/lib/
make -j$(nproc)
make install
--enable-gpl --enable-nonfree: 因使用了x264/x265(GPL)和fdk-aac(非自由),需启用此许可证声明。--enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-vaapi: 启用你指定的功能。--enable-libdrm: 对VAAPI硬解后通过DMA-BUF进行零拷贝渲染至关重要。--enable-shared: 构建共享库,便于你的Qt程序链接。- 排查错误,查看日志: cat ffbuild/config.log
# export LD_LIBRARY_PATH=/opt/ffmpegbin4.3.1/lib
# ./ffmpeg
libva
# git clone https://github.com/intel/libva.git
# ./autogen.sh
# ./configure --prefix=/user_code/tool/libva/install
# make
# make install
SDL
# git clone https://github.com/libsdl-org/SDL.git
# git checkout release-2.32.8
# ./configure --prefix=/code/tool/SDL/install/ --enable-video-kmsdrm
# make
# make install
修改libavutil/error.h
源代码:
#define av_err2str(errnum) \ av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
**报错:error: taking address of temporary array**
因为上面这句宏定义中存在动态申请临时变量(char[AV_ERROR_MAX_STRING_SIZE]){0}
修改后代码:
#ifdef __cplusplus
// C++中使用av_err2str宏
static char av_error[AV_ERROR_MAX_STRING_SIZE] = { 0 };
#define av_err2str(errnum) av_make_error_string(av_error, AV_ERROR_MAX_STRING_SIZE, errnum)
#else
#define av_err2str(errnum) \
av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
#endif
``
未完成,待续。。。