图像视频压缩编码之硬编码硬件编码encoder H.265 in smarteye
为了极大的降低CPU的占用,实现硬解码(也叫硬件加速)非常有必要,一个视频文件或者一路视频流还好,如果增加到64路视频流呢,如果是4K、8K这种高分辨率的视频呢,必须安装上硬解码才是上上策。举个例子在电脑上播放4K以上的H265这类的视频文件,如果不开硬解码,很容易出现卡顿现象,在配置高的电脑也容易出现,毕竟非常的耗CPU资源,来不及刷新,上了硬解码之后,明显流畅的不要不要的,怪不得现在的显卡性能越做越牛逼,就是为了在显示这块尽可能的分担CPU的压力,以便留出CPU时间片做其他的事情。
关于ffmpeg解码,网上搜索到的代码绝对是一大堆一大堆,而且很多都讲得很详细,解码的函数流程图非常清晰,关于ffmpeg这块的学习本人推荐雷神的博客,分析的相当细致,我在很久以前刚用Qt+ffmpeg解码的时候,参考的就是雷神的例子,当然这些demo其实在ffmpeg的开发包dev下的examples也是非常详细的,只不过没有什么分析过程,参考雷神的博客可以看到很多分析过程。
硬解码大致流程:
-
根据硬解码类型查找硬解码设备类型 av_hwdevice_find_type_by_name
-
根据解码设备类型找到硬解码的格式 find_fmt_by_hw_type
-
获取解码器格式回调 videoCodecCtx->get_format
-
创建硬解码设备 av_hwdevice_ctx_create
-
设备硬解码设备 videoCodecCtx->hw_device_ctx
-
解码数据包 avcodec_send_packet avcodec_receive_frame
-
将硬解码后的数据从GPU转换取出来 av_hwframe_transfer_data
-
国内站点:https://gitee.com/feiyangqingyun
-
国际站点:https://github.com/feiyangqingyun
-
个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
-
体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_demo/bin_linux_video。
-
联系方式:微信 feiyangqingyun
-
官方店:https://shop114595942.taobao.com/
相关代码
bool FFmpegThread::initHardware()
{
if (hardware == "none") {
return true;
}
#if (FFMPEG_VERSION_MAJOR > 2)
//根据名称自动寻找硬解码
enum AVHWDeviceType type;
//发现嵌入式上低版本的库没有av_hwdevice_find_type_by_name函数
#ifdef __arm__
#if (FFMPEG_VERSION_MAJOR < 4)
return false;
#else
type = av_hwdevice_find_type_by_name(hardware.toUtf8().data());
#endif
#else
type = av_hwdevice_find_type_by_name(hardware.toUtf8().data());
#endif
debug("硬件加速", QString("名称: %1 数值: %2").arg(hardware).arg(type));
//找到对应的硬解码格式
FFmpegHelper::hw_pix_fmt = FFmpegHelper::find_fmt_by_hw_type(type);
if (FFmpegHelper::hw_pix_fmt == -1) {
debug("加速失败", "错误: 未找到对应加速类型");
return false;
}
int result = -1;
//解码器格式赋值为硬解码
videoCodecCtx->get_format = FFmpegHelper::get_hw_format;
//av_opt_set_int(videoCodecCtx, "refcounted_frames", 1, 0);
//创建硬解码设备
AVBufferRef *hw_device_ref;
result = av_hwdevice_ctx_create(&hw_device_ref, type, NULL, NULL, 0);
if (result < 0) {
debug("加速失败", "错误: 创建视频解码器失败 " + FFmpegHelper::getError(result));
return false;
}
videoCodecCtx->hw_device_ctx = av_buffer_ref(hw_device_ref);
av_buffer_unref(&hw_device_ref);
return true;
#else
return false;
#endif
}
int FFmpegHelper::decode(FFmpegThread *thread, AVCodecContext *avctx, AVPacket *packet, AVFrame *frameSrc, AVFrame *frameDst)
{
int result = -1;
#ifdef videoffmpeg
QString flag = "硬解出错";
#if (FFMPEG_VERSION_MAJOR > 2)
result = avcodec_send_packet(avctx, packet);
if (result < 0) {
thread->debug(flag, QString("步骤: %1 原因: %2").arg("avcodec_send_packet").arg(getError(result)));
return result;
}
while (result >= 0) {
result = avcodec_receive_frame(avctx, frameSrc);
if (result == AVERROR(EAGAIN) || result == AVERROR_EOF) {
break;
} else if (result < 0) {
thread->debug(flag, QString("步骤: %1 原因: %2").arg("avcodec_receive_frame").arg(getError(result)));
break;
}
//将数据从GPU拷贝到CPU
result = av_hwframe_transfer_data(frameDst, frameSrc, 0);
if (result < 0) {
av_frame_unref(frameDst);
av_frame_unref(frameSrc);
thread->debug(flag, QString("步骤: %1 原因: %2").arg("av_hwframe_transfer_data").arg(getError(result)));
return result;
}
goto end;
}
#endif
return result;
end:
//调用线程处理解码后的数据
thread->decodeVideo2(packet);
#endif
return result;
}
【支持红外夜视IRCUT的4G智能安全帽BW620Y,内部主板型号有,SAE01, W20, k61v1_32_bsp_1g, k62v1_64_bsp, soq_azw_05_Natv,soq_azw_01_Natv,AZW003,aqm6816,soq_azw_01_Natv,SC161, W25,比传统的白光照明灯效果要好很多,可以规避大的亮的光斑,可以在雾天使用。-哔哩哔哩】 https://b23.tv/C36wsnX
危险气体检测仪,通过4G/5G执法记录仪或者4G/5G智能安全帽上报到平台,https://www.besovideo.com/detail?t=1&i=273
智能安全帽~生命体征检测与危险气体检测一体化集成设计还是蓝牙无线外挂式方式好?https://www.besovideo.com/detail?t=1&i=279
智能安全帽~生命体征采集上报,https://www.besovideo.com/detail?t=2&i=506
智能安全帽,检测生命体征上报平台, https://v.douyin.com/e3oP4Yx/
AIoT万物智联,智能安全帽生产厂家,执法记录仪生产厂家,为大型国企央企提供移动视频类产品的ODM/OEM服务,单北斗定位智能安全帽、智能头盔、头盔记录仪、独立北斗定位执法记录仪、智能视频分析/边缘计算AI盒子、车载视频监控/车载DVR/NVR、布控球、智能眼镜、智能手电、智能电子工牌、无人机4G补传系统等统一接入大型统一视频平台~融合通信可视指挥调度平台VMS/smarteye 。
什么是智能安全帽,如何选购智能安全帽,智能安全帽的主要功能,https://www.besovideo.com/detail?t=1&i=109
目前支持的AI智能算法、视频智能分析算法有哪些,https://www.besovideo.com/detail?t=1&i=297
视频演示1~单独北斗定位智能安全帽助力光伏新能源, 视频演示2~石油石化
海康、大华等5000路固定点摄像头走国标GB28181接入统一视频平台smarteye,支持eHome,ISUP, SIP,萤石云,CMSV6等
电力施工作业现场安全生产风险管控应用方案,https://www.besovideo.com/detail?t=1&i=50
轻危大型厂矿可视化监管系统方案(有内部作业视频数据安全保密的需求),https://www.besovideo.com/detail?t=1&i=258
小微型4G/WiFi执法记录仪、胸牌记录仪大全,https://www.besovideo.com/detail?t=2&i=1784
超薄款4G工牌视频记录仪BH128,https://www.besovideo.com/detail?t=2&i=1575
超小微型4G胸牌视频记录仪BZ223,全国产芯片,单独北斗定位, https://www.besovideo.com/detail?t=2&i=1542
防抖执法记录仪、智能安全帽、头盔记录仪大全,https://www.besovideo.com/detail?t=2&i=1692
可拆卸智能安全帽、分体式智能头盔记录仪大全,https://www.besovideo.com/detail?t=2&i=1697
北斗双频高精度定位智能工卡、电子工牌大全,https://www.besovideo.com/detail?t=2&i=1689
为什么武警、特警拉练演习的MESH自组网系统都不约而同的选择了smarteye平台?https://www.besovideo.com/detail?t=2&i=1215
