如何在Linux上运行硬件加速qsv,看这一篇就够了。

前置准备工作

1、检查linux 的版本,最好使用Ubuntu20.04 使用该版本最便捷也比较稳定。如果使用Ubuntu18.04及以下的版本很多依赖库需要自行编译。

2、检查内核版本 va-api要求Kernel 4.14.16及以上。

uname -ar

3、更新Linux 软件包管理

sudo apt update

3、检查是否安装gcc 与 cmake 开发环境 其中 cmake 的版本要求在3.x以上否则需要更新会报错。

sudo apt install gcc
sudo apt install cmake
sudo apt-get install pkg-config

4、检测是否具备核显能力,查看系统是否检测到GPU 或者直接去英特尔官网搜索

lspci | grep VGA

这里基本上不会有什么问题出现。编译过程中提示缺什么包就安装什么包

更详细步骤可参考:https://zhuanlan.zhihu.com/p/62246545

编译Intel Media SDK 库文件

这个是最关键的也是最重要的编译库 。根据要求需要libva、libva-utils 、Gmmlib、Griver 前提编译的依赖库
在这里插入图片描述
1、下载ibva、libva-utils 、Gmmlib、Griver 等编译库

sudo apt-get install -y libmfx1 libmfx-tools libva-dev libmfx-dev intel-media-va-driver-non-free vainfo

2、添加Linux环境环境变量

环境配置:
vim ~/.bashrc
#末尾添加
export LIBVA_DRIVER_NAME=iHD

3、检查用Vainfo 检查是否配置成功

sudo vainfo

如果出现没报错说明编译成功Inter Driver有检测核显

4、下载编译 Intel Media SDK 库。解压文件
[Intel Mdeida SDK 下载:https://github.com/Intel-Media-SDK/MediaSDK/releases]

5、编译 Intel Media SDK库文件进入源文件

mkdir build &&cd build
cmake . .
make -j8 && make install

6、再次添加Linux 环境变量

vim ~/.bashrc
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri/
export LD_LIBRARY_PATH=/opt/intel/mediasdk/lib/

编译 ffmpeg 文件

1、安装环境

sudo apt install yasm

2、下载ffmpeg 文件 [ ffmpeg下载地址:https://www.ffmpeg.org/download.html]
3、进入源文件夹中,创建build文件夹

mkdir build && cd build
./configure --arch=x86_64 --disable-yasm --enable-vaapi --enable-libmfx --extra-cflags=-fPIC --extra-cxxflags=-fPIC --prefix=“输出目录”

4、进入输出目录bin中检查是否成功

./ffmpeg -hwaccels

在这里插入图片描述

5、运行可执行文件是否报错

ffmpeg -y -hwaccel qsv -c:v h264_qsv -i 1.mp4 -q:v 30 -c:v h264_qsv 2.mp4

链接ffmpeg静态库

进入源文件夹中下载的ffmpeg 源码的版本最好编译源码使用的版本一致不然很有可能会出问题。

vim CMakeLists.txt

复制修改四个地方的目录位置粘贴

cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)
message("project root path is ${CMAKE_CURRENT_SOURCE_DIR}")
set(CMAKE_CXX_FLAGS "-pthread -g" )
set(ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(OPENCV_LIB_PATH "/home/mo/project/lib  //源文件库文件位置")
set(LDFLAGS "${LDFLAGS} -lva")
macro(OPENCV_IMPORT_LIBS LibsList LibName LibPaths)
    message(STATUS "import libs ${LibName}!")

    add_library(${LibName} STATIC IMPORTED GLOBAL)
    set_target_properties(${LibName} PROPERTIES IMPORTED_LOCATION ${LibPaths})

    list(APPEND ${LibsList} ${LibName})
endmacro(OPENCV_IMPORT_LIBS LibsList LibName LibPaths)

include_directories(${ROOT_PATH}/include //头文件位置)

include_directories(/home/mo/buildA/include //静态库头头文件位置)

OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_world     "${OPENCV_LIB_PATH}/libopencv_world.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_llmlmf    "${OPENCV_LIB_PATH}/libIlmImf.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjpeg   "${OPENCV_LIB_PATH}/liblibjpeg-turbo.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_liblibopenjp2   "${OPENCV_LIB_PATH}/liblibopenjp2.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libpng    "${OPENCV_LIB_PATH}/liblibpng.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libtiff   "${OPENCV_LIB_PATH}/liblibtiff.a")
#OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjasper "${OPENCV_LIB_PATH}/liblibjasper.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libnotify "${OPENCV_LIB_PATH}/libittnotify.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libwebp    "${OPENCV_LIB_PATH}/liblibwebp.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libquirc    "${OPENCV_LIB_PATH}/libquirc.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libzlib    "${OPENCV_LIB_PATH}/libzlib.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_liblibprotobuf    "${OPENCV_LIB_PATH}/liblibprotobuf.a")
file(GLOB  WRAPPER_SRCS
        ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
    )

add_executable(OpenCVTest ${WRAPPER_SRCS})

target_link_libraries(OpenCVTest
    ${OPENCV_LIBS}

        -ldl
)
target_link_directories(${PROJECT_NAME}  PUBLIC /home/mo/buildA/lib   //静态库位置)

target_link_libraries(${PROJECT_NAME}
    -Wl,--start-group
    libavutil.a
    libswscale.a
    libswresample.a
    libavcodec.a
    libavformat.a
    libavfilter.a
    libavdevice.a
    -Wl,--end-group
    -lmfx
    -lz
    -lva
    -lX11
    -lvdpau
    -llzma
    -ldrm
    -lva
    -lva-drm
    -lva-x11
    pthread
)

7、完成运行。

参考:
https://blog.csdn.net/m0_38101947/article/details/130100490
https://www.freesion.com/article/34851134007/

可能出现的问题

1、提示 [h264_qsv @ 0x7fadd00a3140] Selected ratecontrol mode is unsupported下qsv 需要改变编码模式,不支持固定码率
2、提示[h264_qsv @ 0x7f71dc0a3780] Error during encoding: undefined behavior (-16) 可能ffmpeg 版本与源码的版本不一致导致
3、如果 运行 ffmpeg 提示XXX .so cannot open shared object file: No such file or directory 需要编辑

vim /etc/ld.so.conf.d/ffmpeg.conf
#添加到最后一行(ffmpeg 库位置)
/monchickey/ffmpeg/lib
sudo ldconfig

4、提示 undefined reference to lzma_stream_decoder undefined reference to zma_code in function vdpau_device_create 错误。
参考 :FFmepeg在编译执行文件时遇到的问题及解决方法

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ffmpeg硬件加速功能可以通过使用qsv(Quick Sync Video)实现。qsv是Intel提供的一种硬件加速技术,它可以利用集成在Intel处理器中的GPU来加速视频解码和编码的过程。使用qsv可以大大提高ffmpeg处理视频的效率。 要启用ffmpegqsv硬件加速功能,可以按照以下步骤进行操作: 1. 首先,确保你的Intel处理器支持Quick Sync Video技术。你可以在Intel的官方网站上查找你的处理器型号,以确定它是否支持qsv。 2. 然后,你需要编译ffmpeg时启用qsv支持。在配置ffmpeg时,添加--enable-libmfx参数来启用libmfx库,这是与qsv配套的库。编译和安装ffmpeg后,你的ffmpeg就具备了qsv硬件加速的能力。 3. 在使用ffmpeg时,你需要使用适当的命令行参数来启用qsv硬件加速。例如,你可以使用-vcodec参数指定使用qsv进行视频编码,或使用-decoder参数指定使用qsv进行视频解码。具体的命令行参数可以根据你的需求和具体的视频处理任务进行调整。 总结来说,要搭建ffmpegqsv硬件加速调试环境,你需要确保你的处理器支持qsv技术,并在编译ffmpeg时启用qsv支持。然后,在使用ffmpeg时,使用适当的命令行参数来启用qsv硬件加速。通过这样的设置,你就可以利用qsv硬件加速来提高ffmpeg的视频处理效率了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FFmpeg硬件加速](https://blog.csdn.net/u012117034/article/details/123470108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值