Windows平台实现超高分辨率或帧率硬编码

简介: Windows平台实现超高分辨率或帧率硬编码

 我们在做Windows平台RTMP推送或轻量级RTSP服务模块的时候,遇到这样的问题,有些超高清场景(4K甚至更高分辨率)或高帧率场景(50帧+)的编码,比如地铁安检机数据分析检测,设备性能一般的话,软编码很容易出现瓶颈,这个时候就需要硬编。基于此,我们前几年发布了基于NVIDIA的硬编。

image.gifwindows二次水印.png

硬编码逻辑调用:

privatevoidLoadHWVideoEncoderInfos()
        {
hw_video_encoder_infos_.Clear();
Int32count=0;
UInt32ret=NTSmartPublisherSDK.NT_PB_GetHWVideoEncoderInfoCount(refcount);
if (NTBaseCodeDefine.NT_ERC_OK==ret&&count>0)
            {
IntPtrptr_hw_video_encoder_infos=Marshal.AllocHGlobal(Marshal.SizeOf(typeof(NT_PB_HWVideoEncoderInfo)) *count);
Int32out_count=0;
ret=NTSmartPublisherSDK.NT_PB_GetHWVideoEncoderInfos(ptr_hw_video_encoder_infos, count, refout_count);
if (ret!=NTBaseCodeDefine.NT_ERC_OK||out_count<1)
                {
hw_video_encoder_infos_.Clear();
                }
else                {
for (inti=0; i<out_count; i++)
                    {
NT_PB_HWVideoEncoderInfohw_video_encoder_info= (NT_PB_HWVideoEncoderInfo)Marshal.PtrToStructure(ptr_hw_video_encoder_infos+i*Marshal.SizeOf(typeof(NT_PB_HWVideoEncoderInfo)), typeof(NT_PB_HWVideoEncoderInfo));
hw_video_encoder_infos_.Add(hw_video_encoder_info);
                    }
                }
Marshal.FreeHGlobal(ptr_hw_video_encoder_infos);
            }
        }
privateboolIsSupportHWVideoEncoder(UInt32codec_id)
        {
foreach (variinhw_video_encoder_infos_)
            {
if (codec_id==i.codec_id_)
returntrue;
            }
returnfalse;
        }
privatevoidEnableHWVideoEncoderControls(boolis_enable)
        {
btn_check_video_hardware_encoder_.Enabled=is_enable;
combobox_video_encoders_.Enabled=is_enable;
combobox_video_hardware_encoder_devices_.Enabled=is_enable;
        }

image.gif

接口设计:

/** 获取视频硬编码器信息数* count: 返回的数量* 成功返回 NT_ERC_OK*/        [DllImport(@"SmartPublisherSDK.dll")]
publicstaticexternUInt32NT_PB_GetHWVideoEncoderInfoCount(refInt32count);
/** 获取视频硬编码信息* infos: 请先调用GetHWVideoEncoderInfoCount, 然后分配这个数组* info_array_size: 分配的数组大小* out_count: 实际返回的数量* 成功返回 NT_ERC_OK*/        [DllImport(@"SmartPublisherSDK.dll")]
publicstaticexternUInt32NT_PB_GetHWVideoEncoderInfos(IntPtrinfos, Int32info_array_size, refInt32out_count);
/** 设置软硬编码类型, 编码器, codec_id, 编码器其他参数.* type: 0为软编码, 1为硬编码, 默认是软编码.* encoder_id: 如果是软编码, 并且用h264, 可以设置0, 0用默认编码器, 也可以设置1, 设置1将使用OpenH264编码. 如果不是h264, 请设置成0; 如果是硬编码, 128为NVIDIA video encoder (NVENC), 填其他值接口返回错误.* param1: 如果是软编码,请设置0; 如果是硬编码且是NVENC, 这个参数用来设置GPU index, 设置-1的话SDK自动选择GPU.* codec_id: 设置h264或h265编码, 默认是h264, 请参考NT_MEDIA_CODEC_ID,  h264填 NT_MEDIA_CODEC_ID_H264, h265填 NT_MEDIA_CODEC_ID_H265.* 注意: 软编码不支持h265, 硬编码根据实际硬件情况决定是否支持h265.* 如果调用了这个接口,请不要再调用SetVideoEncoderType接口* 成功返回 NT_ERC_OK*/        [DllImport(@"SmartPublisherSDK.dll")]
publicstaticexternUInt32NT_PB_SetVideoEncoder(IntPtrhandle, Int32type, Int32encoder_id, UInt32codec_id, Int32param1);

image.gif

如果需要看自己配置的硬件设备是不是支持硬编码,可以到NVIDIA官方网站查看,当然也可以用我们的接口做检测,网站链接如下:

Video Encode and Decode GPU Support Matrix | NVIDIA Developer

相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
2109 4
|
1月前
|
监控 编译器 Windows
Qt5实现Windows平台串口通信
Qt5实现Windows平台串口通信
|
1月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
303 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
1月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
169 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
2月前
|
安全 Linux API
JEB Pro v5.31 (macOS, Linux, Windows) - 逆向工程平台
JEB Pro v5.31 (macOS, Linux, Windows) - 逆向工程平台
145 0
|
3月前
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
168 0
|
Unix Linux iOS开发
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
103 0
|
6月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
200 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
监控 Windows
Windows平台RTSP|RTMP播放器如何实时调节音量
我们在做Windows平台RTSP、RTMP播放器的时候,有这样的技术需求,特别是多路监控的时候,并不是每一路audio都需要播放出来的,所以,这时候,需要有针对音量调节的设计
209 1
|
8月前
|
固态存储 C++ 计算机视觉
Windows平台GIMP 2.10下载教程:零基础入门高级图像编辑
GIMP(GNU Image Manipulation Program)是一款开源跨平台图像编辑工具,支持图层管理、高级修图、色彩校正等功能,广泛应用于平面设计和照片修复。其优势包括全功能免费、插件生态丰富(600+扩展插件)、硬件要求低(1GB内存即可流畅运行)。本文详细介绍GIMP的软件定位、安装流程、首次配置及常见问题解答,帮助用户快速上手并充分利用其强大功能。