您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ffmpeg 硬解码

qianbo_insist 发布时间:2021-08-09 22:36:33 ,浏览量:0

ffmpeg 硬件解码

由于现在h264,h265视频的增多,分辨率增大,甚至2k,4k监控视频的增多,需要利用硬件来实现高效解码和AI识别等的情况越来越多,日益重要,显卡GPU的算力强大,可以提供更高效和灵活的能力,开发者面对日益增加的不同硬件,面对不同的接口,需要耗费大量的精力,对接不同的硬件是比较耗时的,ffmpeg为我们提供了一个完整的解决方案,让我们不关心底层的实现,只面向接口。 主流的硬件解码方案由Intel、AMD-ATI以及Nvdia 三家公司推出。

ffmpeg支持的硬件名称

可以使用avcodec_find_decoder_by_name 来查找名称。

static const char *const hw_type_names[] = { //CUDA–》Nvidia GPU计算库 [AV_HWDEVICE_TYPE_CUDA] = “cuda”, //DRM 是linux 下的图形渲染架构(Direct Render Manager) [AV_HWDEVICE_TYPE_DRM] = “drm”, //微软directx,使用D3D9 [AV_HWDEVICE_TYPE_DXVA2] = “dxva2”, //微软directx,使用D3D11 [AV_HWDEVICE_TYPE_D3D11VA] = “d3d11va”, //面向异构系统(此系统中可由CPU,GPU或其它类型的处理器架构组成)的并行编程的开放式标准。 [AV_HWDEVICE_TYPE_OPENCL] = “opencl”, //英特尔Quick Sync Video [AV_HWDEVICE_TYPE_QSV] = “qsv”, //Video Acceleration Api,UNINX下的编码接口 [AV_HWDEVICE_TYPE_VAAPI] = “vaapi”, //Video Decode and Presentation API for Unix ,NVIDIA提供的 [AV_HWDEVICE_TYPE_VDPAU] = “vdpau”, // 苹果 [AV_HWDEVICE_TYPE_VIDEOTOOLBOX] = “videotoolbox”, // 安卓 [AV_HWDEVICE_TYPE_MEDIACODEC] = “mediacodec”, };

查看状态,指定使用某种解码器

可以使用命令: ffmpeg -hwaccels 来查看硬件的支撑

常用函数

av_hwdevice_ctx_create
av_hwdevice_ctx_alloc
device_ctx->internal->hw_type->device_create 
av_hwdevice_ctx_init
av_hwframe_ctx_alloc
av_hwframe_ctx_init
hwframe_ctx_free

//gpu frame和memory freme之间的数据传递
av_hwframe_transfer_data 
//分配AVFrame空间
av_hwframe_get_buffer 
avformat_alloc_context 
avformat_open_input    
av_format_inject_global_side_data
av_format_inject_global_side_data 
avformat_match_stream_specifier
avformat_match_stream_specifier  
av_find_best_stream              
stream_component_open
stream_component_open            
avcodec_alloc_context3           

avcodec_find_decoder
avcodec_find_decoder_by_name

仔细查看这些函数,在硬件的编解码中可以充分利用

关联硬件解码器使用

通过hw_device_setup_for_encode/hw_device_setup_for_decode进行设置

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0373s