FFmpeg视频解码硬件加速
《音视频应用开发系列文章目录》
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视频解码硬件加速相关推荐
- ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc
文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...
- ffmpeg Nvidia硬件加速总结
0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性能工具.源码及文档,支 ...
- FFMPEG NVIDIA硬件加速总结
目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...
- ffmpeg Intel硬件加速总结
0. 概述 FFmpeg可通过Intel的GPU进行加速,加速器的名称是Intel Quick Sync Video,简称qsv,支持该加速器的Intel处理器的型号是带有Intel Iris gra ...
- ffmpeg gpu硬件加速
整理下自己百度以及实验成功的结果 0. 成功截图. 一开始, 我用cpu去跑, 速度大约在 3-5 s 这样子. 用gpu去跑,速度就到15-20 这个样子. 确实快了很多. 1. 环境安装及检查. ...
- FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速
本文来自FFmpeg Maintainer赵军在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,赵军介绍了FFmpeg的历史.关键组件,并介绍 ...
- FFmpeg 硬件加速方案概览 (下)
被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...
- FFmpeg 硬件加速方案概览 (上)
被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...
- opencv python gpu加速_在Windows上使用OpenCV和Python进行硬件加速解码(MSMT/IntelMFX/FFMPEG/any-backend)...
我无法在Windows10上使用OpenCV进行硬件加速解码. 有什么提示吗?我已经在最新的opencv4.1.0forwindows中编译并尝试了所有的后端. 我对MSMF解码最有信心,因为它支持D ...
最新文章
- echo怎么把日志清空_电脑越来越卡到底怎么办?一分钟教你释放C盘空间,瞬间提速5倍...
- 【Python数据结构】——并查集的实现(查找、合并、集合、实例)
- centos移动文件到指定目录_Dynamo批量分离中心文件并另存到指定目录
- 并查集——程序自动分析(洛谷 P1955)
- 轻松学习分布式|系列2|负载均衡算法。
- java web 播放器代码_各种网页播放器代码大全
- 格雷码与二进制码的互换
- 顺丰速运电子面单打印步骤 快递鸟教程
- 高分meta分析质量评价方法
- 显示 wordpress 文章摘要函数the_excerpt
- EasyX安装与使用
- 教matlab唱周董的《七里香》
- Spring的AOP(一):什么是AOP
- 如何通过企业微信便捷访问华为云、阿里云?
- JZOJ1758. 过河
- php怎么变成微信小程序,自己怎么开通微信小程序
- oracle 280000,续-实例恢复- ORACLE instance shut down
- 01、爬虫js逆向之-七麦数据
- 数字化和管理哲学 | 中国企业为啥用不好ERP却信中台和阿米巴
- python 解析pb文件_Tensorflow:从图形文件(.pb文件)中获取预测