《音视频应用开发系列文章目录》

ffmpeg支持的硬件解码器

enum AVHWDeviceType {AV_HWDEVICE_TYPE_NONE,AV_HWDEVICE_TYPE_VDPAU,AV_HWDEVICE_TYPE_CUDA,AV_HWDEVICE_TYPE_VAAPI,AV_HWDEVICE_TYPE_DXVA2,AV_HWDEVICE_TYPE_QSV,AV_HWDEVICE_TYPE_VIDEOTOOLBOX,AV_HWDEVICE_TYPE_D3D11VA,AV_HWDEVICE_TYPE_DRM,AV_HWDEVICE_TYPE_OPENCL,AV_HWDEVICE_TYPE_MEDIACODEC,
};

获取当前环境支持的硬件解码器

std::vector<std::string> get_vdec_support_hwdevices() {std::vector<std::string> hwdevs;hwdevs.clear();enum AVHWDeviceType type = AV_HWDEVICE_TYPE_NONE;while ((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE) {hwdevs.push_back(av_hwdevice_get_type_name(type));}return hwdevs;
}

CPU解码流程

avformat_open_input ->
avformat_find_stream_info ->
avcodec_open2 ->
LOOP:av_read_frame -> avcodec_send_packet -> avcodec_receive_frame

GPU解码流程

相比于CPU解码同样都是使用AVCodec为解码器结构体。GPU解码需要多填充AVCodec两个成员get_format和hw_device_ctx。

get_format 用于获取硬件像素格式的回调函数

hw_device_ctx 硬件解码器设备上下文

avformat_open_input ->
avformat_find_stream_info ->
avcodec_get_hw_config -> (从AVCodec获取对应硬件编码器的配置以取得hw_pix_fmt)
av_hwdevice_ctx_create -> (创建解码器设备上下文,用于填充AVCodec的hw_device_ctx)
register AVCodecContext's callback function:get_format -> (注册回调函数,在解码的时候会调用)
avcodec_open2 ->
LOOP:av_read_frame -> avcodec_send_packet -> avcodec_receive_frame -> av_hwframe_transfer_data (从GPU拷贝数据到CPU或则从CPU拷贝数据到GPU)

回调函数get_format

static enum AVPixelFormat get_hw_format(AVCodecContext *ctx, const enum AVPixelFormat *pix_fmts) {const enum AVPixelFormat *p;for (p = pix_fmts; *p != -1; p++) {if (*p == g_hw_pix_fmt)return *p;}return AV_PIX_FMT_NONE;
}

代码示例

参考《FFmpeg拉流器》

FFmpeg视频解码硬件加速相关推荐

  1. ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc

    文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...

  2. ffmpeg Nvidia硬件加速总结

    0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性能工具.源码及文档,支 ...

  3. FFMPEG NVIDIA硬件加速总结

    目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...

  4. ffmpeg Intel硬件加速总结

    0. 概述 FFmpeg可通过Intel的GPU进行加速,加速器的名称是Intel Quick Sync Video,简称qsv,支持该加速器的Intel处理器的型号是带有Intel Iris gra ...

  5. ffmpeg gpu硬件加速

    整理下自己百度以及实验成功的结果 0. 成功截图. 一开始, 我用cpu去跑, 速度大约在 3-5 s 这样子. 用gpu去跑,速度就到15-20 这个样子. 确实快了很多. 1. 环境安装及检查. ...

  6. FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速

    本文来自FFmpeg Maintainer赵军在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,赵军介绍了FFmpeg的历史.关键组件,并介绍 ...

  7. FFmpeg 硬件加速方案概览 (下)

    被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...

  8. FFmpeg 硬件加速方案概览 (上)

    被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...

  9. opencv python gpu加速_在Windows上使用OpenCV和Python进行硬件加速解码(MSMT/IntelMFX/FFMPEG/any-backend)...

    我无法在Windows10上使用OpenCV进行硬件加速解码. 有什么提示吗?我已经在最新的opencv4.1.0forwindows中编译并尝试了所有的后端. 我对MSMF解码最有信心,因为它支持D ...

最新文章

  1. echo怎么把日志清空_电脑越来越卡到底怎么办?一分钟教你释放C盘空间,瞬间提速5倍...
  2. 【Python数据结构】——并查集的实现(查找、合并、集合、实例)
  3. centos移动文件到指定目录_Dynamo批量分离中心文件并另存到指定目录
  4. 并查集——程序自动分析(洛谷 P1955)
  5. 轻松学习分布式|系列2|负载均衡算法。
  6. java web 播放器代码_各种网页播放器代码大全
  7. 格雷码与二进制码的互换
  8. 顺丰速运电子面单打印步骤 快递鸟教程
  9. 高分meta分析质量评价方法
  10. 显示 wordpress 文章摘要函数the_excerpt
  11. EasyX安装与使用
  12. 教matlab唱周董的《七里香》
  13. Spring的AOP(一):什么是AOP
  14. 如何通过企业微信便捷访问华为云、阿里云?
  15. JZOJ1758. 过河
  16. php怎么变成微信小程序,自己怎么开通微信小程序
  17. oracle 280000,续-实例恢复- ORACLE instance shut down
  18. 01、爬虫js逆向之-七麦数据
  19. 数字化和管理哲学 | 中国企业为啥用不好ERP却信中台和阿米巴
  20. python 解析pb文件_Tensorflow:从图形文件(.pb文件)中获取预测

热门文章

  1. HihoCoder 1634 Puzzle Game
  2. 拍一张图片,设计成海报
  3. 双目摄像头标定完整过程 借助Matlab软件工具箱
  4. php数值计算,PHP基础教程——PHP数值计算
  5. 讯飞语音开发之语音唤醒
  6. 开源微信小程序-1:天天任务清单
  7. Ubuntu下载安装搜狗输入法
  8. 模块式浪涌保护器概述和防雷元件解析
  9. 一个叫“胡万进”的软件缺陷〔转贴〕
  10. Event ID: 7034 1000 解决经过