当前位置: 首页 > news >正文

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。

虽然我们软解码,已经做的资源占有非常低了,但考虑到多路播放的情况,我们也设计了硬解码的接口,下面大概讲下,如何在Unity下开启硬解码:

检测系统是否支持硬解码

		/** 检查是否支持H264硬解码 * 如果支持的话返回NT_ERC_OK*/[DllImport("SmartPlayerSDK")]public static extern UInt32 NT_SP_IsSupportH264HardwareDecoder();/** 检查是否支持H265硬解码* 如果支持的话返回NT_ERC_OK*/[DllImport("SmartPlayerSDK")]public static extern UInt32 NT_SP_IsSupportH265HardwareDecoder();

如果支持,设置H.264、H.265硬解码

		/** 设置H264硬解* is_hardware_decoder: 1:表示硬解, 0:表示不用硬解* reserve: 保留参数, 当前传0就好* 成功返回NT_ERC_OK*/[DllImport("SmartPlayerSDK")]public static extern UInt32 NT_SP_SetH264HardwareDecoder(IntPtr handle, Int32 is_hardware_decoder, Int32 reserve);/** 设置H265硬解* is_hardware_decoder: 1:表示硬解, 0:表示不用硬解* reserve: 保留参数, 当前传0就好* 成功返回NT_ERC_OK*/[DllImport("SmartPlayerSDK")]public static extern UInt32 NT_SP_SetH265HardwareDecoder(IntPtr handle, Int32 is_hardware_decoder, Int32 reserve);

Unity环境下调用,是否支持硬解码,可以在Init后就调用:

uint isInited = NTSmartPlayerSDK.NT_SP_Init(0, IntPtr.Zero);if (isInited != 0)
{Debug.LogError("调用NT_SP_Init失败.." + isInited.ToString());return;
}is_support_h264_hardware_decoder_ = NT.NTBaseCodeDefine.NT_ERC_OK == NT.NTSmartPlayerSDK.NT_SP_IsSupportH264HardwareDecoder();
is_support_h265_hardware_decoder_ = NT.NTBaseCodeDefine.NT_ERC_OK == NT.NTSmartPlayerSDK.NT_SP_IsSupportH265HardwareDecoder();Debug.Log("isSupportH264decoder:" + is_support_h264_hardware_decoder_);
Debug.Log("isSupportH265decoder:" + is_support_h265_hardware_decoder_);

如果检测到支持的话,设置下硬解码即可:

NTSmartPlayerSDK.NT_SP_SetH264HardwareDecoder(videoctrl[sel].player_handle_, is_support_h264_hardware_decoder_ ? 1 : 0, 0);
NTSmartPlayerSDK.NT_SP_SetH265HardwareDecoder(videoctrl[sel].player_handle_, is_support_h265_hardware_decoder_ ? 1 : 0, 0);

如果系统支持硬解码,开启后,可以明显看到CPU占用,会有一定的改善,在多路播放的场景下,还是非常必要,感兴趣的开发者,可以参考设计。

 

http://www.lryc.cn/news/139741.html

相关文章:

  • 模板方法模式在JDBCTemplate中的应用
  • 如何在Debian中同步系统时间?Debian 系统时间配置(NTP服务)
  • 模板方法模式(十六)
  • 机器学习笔记之优化算法(十九)牛顿法与正则化
  • Java面试之单例模式的六种实现方式
  • re正则入门
  • C++ Day5
  • el-element:自定义参数
  • “分布式”与“集群”初学者的技术总结
  • C++day5(静态成员、类的继承、多继承)
  • 2023MySQL+MyBatis知识点整理
  • 【随笔】如何使用阿里云的OSS保存基础的服务器环境
  • 汽车电子笔记之:AUTOSA架构下的多核OS操作系统
  • 解决华为云ping不通的问题
  • 数据结构入门 — 链表详解_双向链表
  • 时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)
  • SSL/TLS协议的概念、工作原理、作用以及注意事项
  • [Stable Diffusion教程] 第一课 原理解析+配置需求+应用安装+基本步骤
  • uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)
  • VR全景加盟会遇到哪些问题?全景平台会提供什么?
  • 如何进行微服务的集成测试
  • spark grpc 在master运行报错 exitcode13 User did not initialize spark context
  • nginx 反向代理的原理
  • 【SpringBoot】第二篇:RocketMq使用
  • 飞天使-vim简单使用技巧
  • 分布式搜索引擎----elasticsearch
  • AnnotationConfigApplicationContext类和ClasspathXmlApplicationContext类的区别?
  • 使用VSCode SSH实现公网远程连接本地服务器开发的详细教程
  • Codeforces Round 894 (Div. 3)
  • ACL2023 Prompt 相关文章速通 Part 1