海康无线视频服务器,海康摄像头直播视频上传到流媒体服务器如何降低延迟?(附TCP及UDP区别介绍)...

原标题:海康摄像头直播视频上传到流媒体服务器如何降低延迟?(附TCP及UDP区别介绍)

近期有位开发者为了用我们的国标GB28181流媒体服务器进行测试,在自己的现场环境安装了海康的有线摄像头,通过4g转wifi来连接,上传视频到平台之后,打开视频最长需要10分钟左右才能显示,大多数时候要3~4分钟才能出来,为此这位开发者找到我们的技术支持,寻求帮助。

ebfacb2591c737a91479e76a19bfc679.png

此种情况就是视频直播中最常见的延迟情况,我们的技术支持是建议这位开发者先降低码率和分辨率进行测试,可以在下图的地址中调试分辨率和码率:

4e359c3a3318a4067a6a69cf61d4de2e.png

正常模式下,流媒体服务器中的视频流是走udp协议来传输的,UDP协议的特点是在传输数据前不需要建立连接,也避免了后续的断开连接,对到达顺序混乱的数据包不进行重新排序。修改分辨率和码率之后,把我们流媒体服务器的UDP传输协议改成TCP传输协议,就能够正常播放了。

fa2c2f4773d4822a046602c16c412db5.png

说到TCP和UDP,我就顺便再普及一下这两者的区别吧。

TCP

TCP的优点: 可靠,稳定,TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP的缺点: 慢,效率低,占用系统资源高,易被攻击TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时。

UDP

UDP的优点: 快,比TCP稍安全

UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但同时也要明白UDP也是无法避免攻击的。

UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

我们的国标GB28181流媒体服务器允许两种传输模式共存,开发者可以根据自身的需要进行调试。

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用海康提供的 SDK (如 HCNetSDK 或者 EZ_SDK) 来播放海康的 MP4 视频。以下是一些示例代码,用于在 C# 中使用 HCNetSDK 播放海康 MP4 视频: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; namespace HCNetSDKTest { public partial class Form1 : Form { // HCNetSDK.dll 的路径 const string HCNetSDKDllPath = "HCNetSDK.dll"; // 登录句柄 private int iLoginID = -1; // 播放句柄 private int iPlayID = -1; // 播放窗口 private IntPtr hWnd; // SDK 初始化 [DllImport(HCNetSDKDllPath)] private static extern bool NET_DVR_Init(); // SDK 释放 [DllImport(HCNetSDKDllPath)] private static extern bool NET_DVR_Cleanup(); // 用户登录 [DllImport(HCNetSDKDllPath)] private static extern int NET_DVR_Login_V30(string sDVRIP, ushort wDVRPort, string sUserName, string sPassword, ref NET_DVR_DEVICEINFO_V30 lpDeviceInfo); // 用户注销 [DllImport(HCNetSDKDllPath)] private static extern bool NET_DVR_Logout(int iLoginID); // 打开实时预览 [DllImport(HCNetSDKDllPath)] private static extern int NET_DVR_RealPlay_V40(int iUserID, ref NET_DVR_PREVIEWINFO lpPreviewInfo, REALDATACALLBACK fRealDataCallback_V30, IntPtr pUser); // 关闭预览 [DllImport(HCNetSDKDllPath)] private static extern bool NET_DVR_StopRealPlay(int iPlayHandle); // 视频数据回调函数 public delegate void REALDATACALLBACK(int lRealHandle, uint dwDataType, IntPtr pBuffer, uint dwBufSize, IntPtr pUser); // 预览参数结构体 public struct NET_DVR_PREVIEWINFO { public int lChannel; public uint dwStreamType; public uint dwLinkMode; public IntPtr hPlayWnd; public uint bBlocked; public uint bPassbackRecord; public uint byPreviewMode; public uint byStreamID; public byte[] byReserve; } // 设备信息结构体 [StructLayout(LayoutKind.Sequential)] public struct NET_DVR_DEVICEINFO_V30 { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)] public string sSerialNumber; public byte byAlarmInPortNum; public byte byAlarmOutPortNum; public byte byDiskNum; public byte byDVRType; public byte byChanNum; public byte byStartChan; public byte byAudioChanNum; public byte byIPChanNum; public byte byZeroChanNum; public byte byMainProto; public byte bySubProto; public byte bySupport; public byte bySupport1; public byte byRes1; public short wDevType; public byte byRes2; public byte bySupport2; public ushort wFirmwareVersion; public ushort wNetProtoVersion; public ushort wUserProtoVersion; public ushort wSignalVersion; public ushort wIrdaVersion; public byte byRes3; public byte byHardwareVersion; public byte bySoftwareVersion; public byte byMiddleWareVersion; public byte byBuildDate; public byte byModifyDate; public byte byRes4; public byte byDevicePerformanceLevel; public byte byReserve2; } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // SDK 初始化 NET_DVR_Init(); // 获取播放窗口句柄 hWnd = pictureBox1.Handle; // 登录 NET_DVR_DEVICEINFO_V30 devInfo = new NET_DVR_DEVICEINFO_V30(); iLoginID = NET_DVR_Login_V30("192.168.1.64", 8000, "admin", "12345", ref devInfo); // 设置预览参数 NET_DVR_PREVIEWINFO previewInfo = new NET_DVR_PREVIEWINFO(); previewInfo.lChannel = 1; // 通道号 previewInfo.dwStreamType = 0; // 码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 previewInfo.dwLinkMode = 0; // 连接模式:0-TCP,1-UDP,2-多播,3-RTP,4-RTP/RTSP,5-RSTP/HTTP previewInfo.hPlayWnd = hWnd; // 播放窗口句柄 previewInfo.bBlocked = 1; // 阻塞取流:1-是,0-否 previewInfo.byPreviewMode = 0; // 预览模式:0-正常预览,1-延迟预览 previewInfo.byPassbackRecord = 0; // 是否启用录像回传:0-不启用,1-启用 previewInfo.byStreamID = 1; // 码流ID,取值范围为从0开始的32个整数 previewInfo.byReserve = new byte[216]; // 保留字段 // 打开实时预览 iPlayID = NET_DVR_RealPlay_V40(iLoginID, ref previewInfo, null, IntPtr.Zero); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // 关闭预览 NET_DVR_StopRealPlay(iPlayID); // 注销 NET_DVR_Logout(iLoginID); // SDK 释放 NET_DVR_Cleanup(); } } } ``` 请注意,上述示例代码仅提供了基本的播放功能,并没有进行错误处理和异常处理。在实际应用中,您需要根据具体情况进行完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值