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

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

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


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

9843e789ee424464850227b414498bc1.png

检测系统是否支持硬解码

        /*
     * 检查是否支持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占用,会有一定的改善,在多路播放的场景下,还是非常必要,感兴趣的开发者,可以参考设计。

相关文章
|
3月前
|
数据采集 vr&ar 图形学
Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。
|
3月前
|
vr&ar 开发工具 图形学
Windows平台Unity3d下如何同时播放多路RTSP或RTMP流
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。
|
3月前
|
网络协议 开发工具 C#
Windows平台如何快速实现RTSP/RTMP直播播放
前段时间,我们在 https://blog.csdn.net/renhui1112/article/details/104143794 提到“RTSP播放器开发过程中需要考虑哪些关键因素”,本次主要介绍,如何调用SDK实现RTSP/RTMP播放能力。
169 0
|
3月前
|
开发工具 图形学 Android开发
Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器.
|
编解码 计算机视觉 Windows
Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件
Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件
Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件
相关产品
机器翻译
推荐文章
更多