首页 > 系统相关 >Windows平台实现超高分辨率或帧率硬编码

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

时间:2023-12-27 19:01:23浏览次数:35  
标签:count 编码 高分辨率 Windows encoder PB video NT

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

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

硬编码逻辑调用:

private void LoadHWVideoEncoderInfos()
        {
            hw_video_encoder_infos_.Clear();

            Int32 count = 0;
            UInt32 ret = NTSmartPublisherSDK.NT_PB_GetHWVideoEncoderInfoCount(ref count);

            if (NTBaseCodeDefine.NT_ERC_OK == ret && count > 0)
            {
                IntPtr ptr_hw_video_encoder_infos = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(NT_PB_HWVideoEncoderInfo)) * count);

                Int32 out_count = 0;

                ret = NTSmartPublisherSDK.NT_PB_GetHWVideoEncoderInfos(ptr_hw_video_encoder_infos, count, ref out_count);

                if (ret != NTBaseCodeDefine.NT_ERC_OK || out_count < 1)
                {
                    hw_video_encoder_infos_.Clear();
                }
                else
                {
                    for (int i = 0; i < out_count; i++)
                    {
                        NT_PB_HWVideoEncoderInfo hw_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);
            }
        }

        private bool IsSupportHWVideoEncoder(UInt32 codec_id)
        {
            foreach (var i in hw_video_encoder_infos_)
            {
                if (codec_id == i.codec_id_)
                    return true;
            }

            return false;
        }

        private void EnableHWVideoEncoderControls(bool is_enable)
        {
            btn_check_video_hardware_encoder_.Enabled = is_enable;
            combobox_video_encoders_.Enabled = is_enable;
            combobox_video_hardware_encoder_devices_.Enabled = is_enable;
        }

接口设计:

/*
         * 获取视频硬编码器信息数
         * count: 返回的数量
         * 成功返回 NT_ERC_OK
		 */
        [DllImport(@"SmartPublisherSDK.dll")]
		public static extern UInt32 NT_PB_GetHWVideoEncoderInfoCount(ref Int32 count);

		/*
         * 获取视频硬编码信息
         * infos: 请先调用GetHWVideoEncoderInfoCount, 然后分配这个数组
         * info_array_size: 分配的数组大小
         * out_count: 实际返回的数量
         * 成功返回 NT_ERC_OK
		 */
        [DllImport(@"SmartPublisherSDK.dll")]
        public static extern UInt32 NT_PB_GetHWVideoEncoderInfos(IntPtr infos, Int32 info_array_size, ref Int32 out_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")]
		public static extern UInt32 NT_PB_SetVideoEncoder(IntPtr handle, Int32 type, Int32 encoder_id, UInt32 codec_id, Int32 param1);

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

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

Video Encode and Decode GPU Support Matrix | NVIDIA Developer


标签:count,编码,高分辨率,Windows,encoder,PB,video,NT
From: https://blog.51cto.com/daniusdk/9003323

相关文章

  • 软件测试/测试开发|你不知道的Windows神操作
    简介Windows操作系统是由微软公司开发的操作系统系列,是全球最广泛使用的操作系统之一。首次发布于1985年,经历了多个版本和更新,如Windows95、WindowsXP、Windows7、Windows10等。目前发行到了Windows11版本,本文将为大家介绍Windows11版本的操作。Windows基础命令##windows......
  • Base64 编码/解码应用
    staticcharbase64_table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";intbase64_encode(constvoid*src,size_tsrc_len,char*dst){ constunsignedchar*s=(constunsignedchar*)src; size_ti=0; size_tlen=0......
  • Windows平台如何实现RTSP拉流添加动态水印|视频处理后转推RTMP或轻量级RTSP服务
     技术背景我们在做Windows平台流数据转发的时候,除了常规的RTSP转RTMP推送外,还有个场景就是,好多开发者希望拉取的RTSP流,做二次视频分析,或者加动态水印等,处理后的数据,再二次编码推送到RTMP服务或轻量级RTSP服务。技术实现本文就以Windows平台拉取RTSP流,回调yuv数据到上层,处理后的数......
  • 表单提交中对于中文数据的编码集设置方法
    其中的中文编码并不是在发送之前就将数据进行编码,而是在请求时进行设置的,不需要手动编码。1、Hutool中importcn.hutool.http.HttpRequest;importcn.hutool.http.HttpUtil;importjava.util.LinkedHashMap;importjava.util.Map;publicstaticvoidmain(String[]args)t......
  • windows 网络适配器
     添加虚拟网卡:            https://blog.51cto.com/elasticsearch/5488949如何区分虚拟网卡和物理网卡:           参考:https://blog.csdn.net/EDDJH_31/article/details/82694205 ......
  • Ubuntu访问Windows共享
    要在Ubuntu上访问Windows共享,可以通过以下步骤进行设置:确保Windows共享设置正确:共享文件夹:在Windows上选择要共享的文件夹,并确保它已共享。右键点击文件夹,选择“属性”,然后进入“共享”选项卡,设置共享选项和权限。网络发现和共享:确保Windows上的网络发现和文件共享已打开。......
  • 解决Python项目部署到服务器上的编码问题
    在将Python项目部署到服务器上时,经常会遇到编码问题,例如中文乱码、字符集不匹配等。这些问题可能导致项目无法正常运行或显示正确的内容。本文将介绍如何解决Python项目部署到服务器上的编码问题,以确保项目能够在服务器上正常运行。步骤一:确认编码问题首先,我们需要确认是否存在编码......
  • Python windows下subprocess模块 cwd 参数不支持相对路径
    前言全局说明Pythonwindows下subprocess模块cwd参数不支持相对路径一、问题程序要执行命令,用到了subprocess模块,并指定了cwd运行路径,在MAC系统下运行正常,在Windows下运行报错。经过查询,是系统差异导致,所以为了方便,在windows下获取当前路径后拼接再生成绝对路径......
  • 在windows下安装mysql 8.1
    1、下载并解压官网下载mysql8,https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip解压到D:\mysql,以下称为根目录2、编写配置文件在根目录下新建my.ini文件,配置以下内容[mysqld]#设置3306端口port=3306#设置mysql的安装目录,一定要与上面的安装路......
  • Ping不通问题解决 windows 查看对端MAC地址 ARP -a
    Ping不通问题解决   Linux查看ARP信息指南(linux查看arp) ARP(地址解析协议)是TCP/IP协议提供的网络层协议,通过ARP可以查看网络层面上当前可连接的本地网络内每个主机的MAC地址。 ##查看系统的ARP信息 Linux系统中查看ARP信息的方法有很多,下面简单介绍几种常见的查......