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

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

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

检测系统是否支持硬解码

cs 复制代码
		/*
     * 检查是否支持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硬解码

cs 复制代码
		/*
     * 设置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后就调用:

cs 复制代码
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_);

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

cs 复制代码
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占用,会有一定的改善,在多路播放的场景下,还是非常必要,感兴趣的开发者,可以参考设计。

相关推荐
音视频牛哥8 小时前
音视频生态下Unity3D和虚幻引擎(Unreal Engine)的区别
游戏引擎·大牛直播sdk·unity3d rtmp·unity3d rtsp·unity3d rtsp播放器·unity3d rtmp播放器·unity3d rtmp推流
音视频牛哥2 天前
RTMP协议在无人机巡检中的应用场景
无人机·大牛直播sdk·rtsp播放器·rtmp播放器·无人机巡检·无人机播放rtsp·无人机播放rtmp
音视频牛哥4 天前
音视频直播应用场景探讨之RTMP推流还是GB28181接入?
大牛直播sdk·rtmp推流·gb28181客户端·gb28181规范·gb28181接入·rtmp推送摄像头·rtmp同屏
音视频牛哥6 天前
GB28181在融合指挥调度系统应用方案探究和技术实现
实时音视频·大牛直播sdk·gb28181安卓端·gb28181平台·gb28181客户端·gb28181设备·gb28181融合调度
音视频牛哥12 天前
Android平台RTMP|RTSP播放器如何回调YUV或RGB数据?
android·大牛直播sdk·rtsp回调yuv·rtmp回调rgb·rtsp播放器回调rgb·rtmp播放器回调yuv·android rtsp播放器
音视频牛哥14 天前
RTMP播放器延迟最低可以做到多少?
音视频·大牛直播sdk·rtmp播放器·linux rtmp播放器·windows rtmp播放器·android rtmp播放器·ios rtmp播放器
音视频牛哥14 天前
Android终端如何快速接入GB28181平台实现实时音视频回传
大牛直播sdk·gb28181安卓端·gb28181 android·gb28181平台·gb28181对接·gb28181记录仪·gb28181-2022对接
音视频牛哥15 天前
Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究
大牛直播sdk·linux rtmp推流·linux rtmp推送·linux采集屏幕同屏·linux采集摄像头rtmp·linux无纸化同屏·linux arm rtmp
音视频牛哥1 个月前
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
大牛直播sdk·linux rtmp推流·linux同屏·linux采集屏幕推流·linux无纸化·linux arm64同屏·linux摄像头rtmp
音视频牛哥1 个月前
Windows平台RTSP|RTMP播放器如何实现实时录像功能
大牛直播sdk·rtsp播放器·rtmp播放器·rtsp录像·rtmp录像·rtsp播放器录像·rtmp播放器录像